コード例 #1
0
ファイル: RoleService.cs プロジェクト: zyptfy/Yu
        /// <summary>
        /// 更新声明
        /// </summary>
        /// <param name="identityRole"></param>
        /// <param name="claimValues"></param>
        /// <param name="claimType"></param>
        /// <returns></returns>
        private async Task UpdateRoleClaimAsync(BaseIdentityRole identityRole, string[] claimValues, string claimType)
        {
            // 取得全部声明
            var claims = await _roleManager.GetClaimsAsync(identityRole);

            // 找出当前类型的声明
            var elementClaims = claims.Where(c => c.Type == claimType);

            // 找到需要删除的声明
            var deleteClaims = elementClaims.Where(e => !claimValues.Contains(e.Value));

            // 找到需要添加声明的值
            var addClaimValues = claimValues.Where(e => !elementClaims.Select(c => c.Value).Contains(e));

            // 执行操作
            foreach (var claim in deleteClaims)
            {
                await _roleManager.RemoveClaimAsync(identityRole, claim);
            }
            foreach (var value in addClaimValues)
            {
                await _roleManager.AddClaimAsync(identityRole, new Claim(claimType, value));
            }

            // 清理当前角色的权限缓存
            _permissionCacheService.ClearRoleClaimCache(identityRole.Name);
        }
コード例 #2
0
ファイル: RoleService.cs プロジェクト: 2644783865/Yu
        /// <summary>
        /// 添加角色
        /// </summary>
        /// <param name="role">角色</param>
        public async Task <bool> AddRoleAsync(RoleDetail role)
        {
            var identityRole = new BaseIdentityRole
            {
                Name     = role.Name,
                Describe = role.Describe
            };

            // 保存角色
            var result = await _roleManager.CreateAsync(identityRole);

            if (result.Succeeded)
            {
                // 保存关联页面元素
                if (role.Elements != null)
                {
                    var elements = new List <string>();
                    foreach (var element in role.Elements)
                    {
                        // 找到所有的父元素
                        var ancestorElements = _elementTreeRepository.GetByWhereNoTracking(e => e.Descendant == Guid.Parse(element));
                        elements.AddRange(ancestorElements.Select(e => e.Ancestor.ToString()));

                        // 找到所有的子元素
                        var descendantElemnts = _elementTreeRepository.GetByWhereNoTracking(e => e.Ancestor == Guid.Parse(element));
                        elements.AddRange(descendantElemnts.Select(e => e.Descendant.ToString()));
                    }
                    elements = elements.Distinct().ToList();

                    await UpdateRoleClaimAsync(identityRole, elements.ToArray(), CustomClaimTypes.Element);
                    await UpdateRoleClaimAsync(identityRole, role.Elements.ToArray(), CustomClaimTypes.DisPlayElement);
                }

                // 保存关联数据规则
                if (role.DataRules != null)
                {
                    await UpdateRoleClaimAsync(identityRole, role.DataRules, CustomClaimTypes.Rule);
                }
                return(true);
            }
            else
            {
                return(false);
            }
        }