public static IEnumerable<RoleViewModel> RoleModelsCheckDB( this IEnumerable<IResourceAuthProvider> authProviders, UbikRoleManager<UbikRole> roleManager) { var resourceAuthProviders = authProviders as IResourceAuthProvider[] ?? authProviders.ToArray(); var systemRoleViewModels = resourceAuthProviders.RoleModels().ToList(); var roleViewModels = new List<RoleViewModel>(systemRoleViewModels); var dbRoles = roleManager.AllRoles().Result.ToList(); roleViewModels.AddRange(from applicationRole in dbRoles where systemRoleViewModels.All(x => x.Name != applicationRole.Name) select new RoleViewModel { Name = applicationRole.Name, RoleId = applicationRole.Id, Claims = applicationRole.Claims.Select(dbClaim => new RoleClaimViewModel() { Type = dbClaim.ClaimType, Value = dbClaim.ClaimValue }), IsPersisted = true, IsSytemRole = false }); foreach (var dbRole in dbRoles) { var found = roleViewModels.FirstOrDefault(x => x.Name == dbRole.Name && x.IsSytemRole); if (found != null) found.RoleId = dbRole.Id; } foreach (var roleViewModel in roleViewModels) { if (roleViewModel.AvailableClaims == null) { var avalableClaims = authProviders.AvailableSystemClaims(); foreach (var roleClaimRowViewModel in avalableClaims) { roleClaimRowViewModel.IsSelected = roleViewModel.Claims.Any(x => x.Type == roleClaimRowViewModel.Type && x.Value == roleClaimRowViewModel.Value); } roleViewModel.AvailableClaims = avalableClaims.ToArray(); } } return roleViewModels; }