sozsoft-platform/api/src/Sozsoft.Platform.DbMigrator/Seeds/PermissionDataSeeder.cs

80 lines
2.8 KiB
C#
Raw Normal View History

2026-03-04 13:47:25 +00:00
using System;
using System.IO;
using System.Threading.Tasks;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.MultiTenancy;
using Volo.Abp.PermissionManagement;
using Sozsoft.Platform.Extensions;
namespace Sozsoft.Platform.Data.Seeds;
public class PermissionSeederDto
{
public List<PermissionGroupDefinitionRecordSeedDto> PermissionGroupDefinitionRecords { get; set; }
public List<PermissionDefinitionRecordSeedDto> PermissionDefinitionRecords { get; set; }
}
public class PermissionDataSeeder : IDataSeedContributor, ITransientDependency
{
private readonly IRepository<PermissionGroupDefinitionRecord, Guid> _permissionGroupRepository;
private readonly IRepository<PermissionDefinitionRecord, Guid> _permissionRepository;
public PermissionDataSeeder(
IRepository<PermissionGroupDefinitionRecord, Guid> permissionGroupRepository,
IRepository<PermissionDefinitionRecord, Guid> permissionRepository)
{
_permissionGroupRepository = permissionGroupRepository;
_permissionRepository = permissionRepository;
}
public async Task SeedAsync(DataSeedContext context)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(Path.Combine("Seeds", "PermissionsData.json"))
.Build();
var items = configuration.Get<PermissionSeederDto>();
foreach (var item in items.PermissionGroupDefinitionRecords)
{
var exists = await _permissionGroupRepository.AnyAsync(x => x.Name == item.Name);
if (!exists)
{
await _permissionGroupRepository.InsertAsync(new PermissionGroupDefinitionRecord
{
Name = item.Name,
DisplayName = item.DisplayName
}, autoSave: true);
2026-03-04 13:47:25 +00:00
}
}
foreach (var item in items.PermissionDefinitionRecords)
{
var exists = await _permissionRepository.AnyAsync(x => x.Name == item.Name);
if (!exists)
{
var perm = new PermissionDefinitionRecord
{
GroupName = item.GroupName,
Name = item.Name,
ParentName = string.IsNullOrWhiteSpace(item.ParentName) ? null : item.ParentName,
DisplayName = item.DisplayName,
IsEnabled = item.IsEnabled,
MultiTenancySide = (MultiTenancySides)item.MultiTenancySide,
};
perm.SetMenuGroup(item.MenuGroup);
await _permissionRepository.InsertAsync(perm, autoSave: true);
2026-03-04 13:47:25 +00:00
}
}
}
}