Beispiel #1
0
        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;
        }