예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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));
        }