Ejemplo n.º 1
0
        /// <summary>
        /// 分配权限
        /// </summary>
        /// <param name="roleId">角色id</param>
        /// <param name="permission">分配权限菜单按钮id集合</param>
        /// <param name="createUserId">创建人userid</param>
        /// <returns></returns>
        public async Task <OperateResult> Save(string roleId, List <string> permission, string createUserId)
        {
            OperateResult result = new OperateResult();

            if (!permission.Any())
            {
                result.Message = "分配的权限不能为空";
                return(result);
            }
            int count = await _sysRoleService.QueryableCountAsync(c => c.RoleId == roleId);

            if (string.IsNullOrWhiteSpace(roleId) || count == 0)
            {
                result.Message = "所分配角色不存在";
                return(result);
            }

            var menus = await _sysModuleService.QueryableAsync(m => permission.Contains(m.ModuleId));

            var buttons = await _sysButtonService.QueryableAsync(b => permission.Contains(b.ButtonId));

            if (!menus.Any() && !buttons.Any())
            {
                result.Message = "分配的权限不能为空";
                return(result);
            }

            //删除现有权限重新分配权限
            await DeleteRemoveCacheAsync(c => c.AuthorizeId == roleId);

            List <SysPermission> list = new List <SysPermission>();

            if (menus.Any())
            {
                list = (from m in menus select new SysPermission()
                {
                    PermissionId = SnowflakeUtil.NextStringId(), AuthorizeId = roleId, ModuleType = 1, ObjectType = 1, SysModuleId = m.ModuleId
                }).ToList();
            }
            if (buttons.Any())
            {
                var bs = (from b in buttons select new SysPermission()
                {
                    PermissionId = SnowflakeUtil.NextStringId(), AuthorizeId = roleId, ModuleType = 2, ObjectType = 1, SysModuleId = b.ButtonId
                }).ToList();
                list.AddRange(bs);
            }
            //删除缓存
            Redis.DelPattern(roleId);
            return(await InsertRemoveCacheAsync(list));
        }