public async Task SetPermissionsAsync() { var dbPermissions = _permissionDefinitionRepository.GetAllList(); // Update DB-related items var dbRootPermissions = dbPermissions.Where(x => string.IsNullOrEmpty(x.Parent)).ToList(); foreach (var dbPermission in dbRootPermissions) { var permission = await _permissionManager.CreatePermissionAsync(dbPermission); await CreateChildPermissionsAsync(dbPermissions, permission); dbPermissions.Remove(dbPermission); } // Update code-related items while (dbPermissions.Any()) { var dbPermission = dbPermissions.FirstOrDefault(); if (dbPermission != null) { var permission = _permissionManager.GetPermissionOrNull(dbPermission.Parent); while (permission == null && dbPermissions.Any(x => x.Name == dbPermission?.Parent)) { dbPermission = dbPermissions.FirstOrDefault(x => x.Name == dbPermission?.Parent); permission = _permissionManager.GetPermissionOrNull(dbPermission?.Parent); } if (permission != null) { await CreateChildPermissionsAsync(dbPermissions, permission); } else { // remove permission with missed parent _permissionDefinitionRepository.Delete(dbPermission); } dbPermissions.Remove(dbPermission); } } }
public static async Task <Abp.Authorization.Permission> CreatePermissionAsync(this IShaPermissionManager permissionManager, PermissionDto permission) { var dbp = new PermissionDefinition() { Name = permission.Name, DisplayName = permission.DisplayName, Description = permission.Description, Parent = permission.ParentName ?? permission.Parent?.Name }; return(await permissionManager.CreatePermissionAsync(dbp)); }