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 PermissionGroupDefinitionRecords { get; set; } public List PermissionDefinitionRecords { get; set; } } public class PermissionDataSeeder : IDataSeedContributor, ITransientDependency { private readonly IRepository _permissionGroupRepository; private readonly IRepository _permissionRepository; public PermissionDataSeeder( IRepository permissionGroupRepository, IRepository 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(); 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 }); } } 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); } } } }