/// <summary> /// 获取 指定用户 对指定模块 全部的 "可访问动作" 列表. /// 可访问动作,包含 当前模块的 默认可用动作 与 针对用户授权了的动作. /// 以及针对 用户的角色授权了的动作. /// </summary> /// <param name="userCode"> 用户代码 </param> /// <param name="moduleCode"> 模块代码 </param> /// <returns></returns> public List <MR_ACTION> GetAllUserAccessAbleActionList(string userCode, string moduleCode) { // 预期结果. List <MR_ACTION> resultList = new List <MR_ACTION>(); // 开始查询处理. using (MyRuleEntities context = new MyRuleEntities()) { // 首先查询用户. MR_USER mrUser = context.MR_USER.FirstOrDefault(p => p.USER_CODE == userCode); if (mrUser == null) { // 用户不存在. return(resultList); } // 然后从 用户所拥有的所有模块的列表中, 查询有没有参数指定的模块. MR_MODULE mrModule = GetAllUserAccessAbleModuleList(context, userCode).FirstOrDefault(p => p.MODULE_CODE == moduleCode); if (mrModule == null) { // 模块不存在 或者 用户 与 用户的角色 没有访问此模块的权限. return(resultList); } // 首先加入 用户可访问的 动作. resultList.AddRange(GetUserAccessAbleActionList(context, userCode, moduleCode)); // 然后 遍历 用户的角色. foreach (MR_ROLE mrRole in mrUser.MR_ROLE) { // 将 用户的角色 的 可访问的 动作列表, 加入结果列表. (重复的不加入) foreach (MR_ACTION oneAction in GetRoleAccessAbleActionList(context, mrRole.ROLE_CODE, moduleCode)) { if (resultList.Count(p => p.ACTION_CODE == oneAction.ACTION_CODE) == 0) { resultList.Add(oneAction); } } } } // 返回. return(resultList); }
/// <summary> /// 获取 指定角色 对指定模块 的 "可访问动作" 列表. /// 可访问动作,包含 当前模块的 默认可用动作 与 针对角色授权了的动作. /// </summary> /// <param name="context"></param> /// <param name="roleCode"></param> /// <param name="moduleCode"></param> /// <returns></returns> private List <MR_ACTION> GetRoleAccessAbleActionList(MyRuleEntities context, string roleCode, string moduleCode) { // 预期结果. List <MR_ACTION> resultList = new List <MR_ACTION>(); // 首先查询角色. MR_ROLE mrRole = context.MR_ROLE.FirstOrDefault(p => p.ROLE_CODE == roleCode); if (mrRole == null) { // 角色不存在. return(resultList); } // 然后从 用户所拥有的所有模块的列表中, 查询有没有参数指定的模块. MR_MODULE mrModule = GetRoleAccessAbleModuleList(context, roleCode).FirstOrDefault(p => p.MODULE_CODE == moduleCode); if (mrModule == null) { // 模块不存在 或者 角色 没有访问此模块的权限. return(resultList); } // 遍历模块下的 动作. foreach (MR_ACTION mrAction in mrModule.MR_ACTION) { if (mrAction.DEFAULT_RULE == 1) { // 默认动作, 自动拥有权限. resultList.Add(mrAction); } else { // 非默认动作,需要 角色有相应的授权. if (mrRole.MR_ACTION.Count(p => p.ACTION_CODE == mrAction.ACTION_CODE) > 0) { // 用户 有这个动作的 授权. resultList.Add(mrAction); } } } // 返回. return(resultList); }