Пример #1
0
        public static IEnumerable<RoleViewModel> RoleModels(this IEnumerable<IResourceAuthProvider> authProviders)
        {
            var resourceAuthProviders = authProviders as IResourceAuthProvider[] ?? authProviders.ToArray();
            var systemRoleNames = resourceAuthProviders.SelectMany(x => x.RoleNames).Distinct();

            foreach (var role in systemRoleNames)
            {
                var model = new RoleViewModel()
                {
                    Name = role,
                    IsSytemRole = true,
                    IsPersisted = false,
                    RoleId = string.Empty,
                    IsSelected = false,
                };
                var claims = resourceAuthProviders.SelectMany(x => x.Claims(model.Name)).ToList();
                if (claims.Any())
                {
                    model.Claims =
                        claims.Select(
                            x => new RoleClaimViewModel()
                            {
                                Type = x.Type,
                                Value = x.Value,
                                IsSelected = true,
                                ResourceGroups = resourceAuthProviders.Where(p => p.ContainsClaim(x)).Select(r => r.ResourceGroup).Distinct().ToArray()
                            });
                }
                else
                {
                    model.Claims = new List<RoleClaimViewModel>();
                }

                var avalableClaims = authProviders.AvailableSystemClaims();
                foreach (var roleClaimRowViewModel in avalableClaims)
                {
                    roleClaimRowViewModel.IsSelected =
                        model.Claims.Any(x => x.Type == roleClaimRowViewModel.Type && x.Value == roleClaimRowViewModel.Value);
                }
                model.AvailableClaims = avalableClaims.ToArray();

                yield return model;
            }
        }
Пример #2
0
        public static IEnumerable<RoleViewModel> RoleModelsCheckDB(
            this IEnumerable<IResourceAuthProvider> authProviders, ApplicationRoleManager roleManager)
        {
            var resourceAuthProviders = authProviders as IResourceAuthProvider[] ?? authProviders.ToArray();
            var systemRoleViewModels = resourceAuthProviders.RoleModels().ToList();
            var roleViewModels = new List<RoleViewModel>(systemRoleViewModels);

            var dbRoles = roleManager.Roles.Include(x => x.RoleClaims).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.RoleClaims.Select(dbClaim => new RoleClaimViewModel()
                                        {
                                            Type = dbClaim.ClaimType,
                                            Value = dbClaim.Value
                                        }),
                                        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;
        }