在用户成功登陆后台页面后,我们需要将当前用户拥有的权限通过菜单的形式展现出来,将未具备的权限隐藏

新建一个HomeController,用于展示后台首页和获取用户权限数据

namespace CZBK.ItcastOA.WebApp.Controllers
{
public class HomeController : BaseController
{
//
// GET: /Home/
IBLL.IUserInfoService UserInfoService { get; set; }
public ActionResult Index()
{
ViewData["name"]=LoginUser.UName;
return View();
}
public ActionResult HomePage()
{
return View();
}
#region 过滤登录用户的菜单权限
/// <summary>
/// 1: 可以按照用户---角色---权限这条线找出登录用户的权限,放在一个集合中。
/// 2:可以按照用户---权限这条线找出用户的权限,放在一个集合中。
/// 3:将这两个集合合并成一个集合。
/// 4:把禁止的权限从总的集合中清除。
/// 5:将总的集合中的重复权限清除。
/// 6:把过滤好的菜单权限生成JSON返回。
/// </summary>
/// <returns></returns>
public ActionResult Getmenus()
{
//1: 可以按照用户---角色---权限这条线找出登录用户的权限,放在一个集合中。
//获取登录用户的信息
var userInfo = UserInfoService.LoadEntities(u=>u.ID==LoginUser.ID).FirstOrDefault();
//获取登录用户的角色.
var userRoleInfo = userInfo.RoleInfo;
//根据登录用户的角色获取对应的菜单权限。
short actionTypeEnum = (short)ActionTypeEnum.MenumActionType;
var loginUserMenuActions = (from r in userRoleInfo
from a in r.ActionInfo
where a.ActionTypeEnum == actionTypeEnum
select a).ToList();
// 2:可以按照用户---权限这条线找出用户的权限,放在一个集合中。
var userActions = from a in userInfo.R_UserInfo_ActionInfo
select a.ActionInfo; var userMenuActions =(from a in userActions
where a.ActionTypeEnum == actionTypeEnum
select a).ToList(); // a.ActionInfo不是一个集合,注意理解权限表与用户权限关系表之间的对应关系
//var userMenuActionse = from a in userInfo.R_UserInfo_ActionInfo
// from b in a.ActionInfo
// where b.ActionTypeEnum == actionTypeEnum
// select b; //3:将这两个集合合并成一个集合。
loginUserMenuActions.AddRange(userMenuActions); //4:把禁止的权限从总的集合中清除。
var forbidActions = (from a in userInfo.R_UserInfo_ActionInfo
where a.IsPass == false
select a.ActionInfoID).ToList();
var loginUserAllowActions=loginUserMenuActions.Where(a=>!forbidActions.Contains(a.ID)); //5:将总的集合中的重复权限清除。
var lastLoginUserActions=loginUserAllowActions.Distinct(new EqualityComparer());
//6:把过滤好的菜单权限生成JSON返回。
var temp = from a in lastLoginUserActions
select new { icon = a.MenuIcon, title = a.ActionInfoName, url=a.Url};
return Json(temp,JsonRequestBehavior.AllowGet);
}
#endregion
}
}
HomeController下的GetMenu方法返回的是一个 菜单图片、菜单名称、操作路径的二维JSON数组

MVC基于角色权限控制--菜单展示的更多相关文章

  1. MVC基于角色权限控制--数据库设计

    在网站后台设计过程中都会遇上权限控制这一问题 当前较为流行的解决方案是基于角色的权限管理 基本思路如下 分别建立 用户信息表.角色信息表.权限信息表 让用户和角色关联,角色和权限关联,当用户访问时,通 ...

  2. MVC基于角色权限控制--管理角色

    管理角色分为 添加角色.删除角色.修改角色.给角色分配权限(修改角色权限) 新建RoleInfoController继承BaseController namespace CZBK.ItcastOA.W ...

  3. MVC基于角色权限控制--权限过滤

    用户访问服务器实际上就是访问控制器下的方法,因此在权限控制就是控制器方法的访问权限 为了方便控制,我们可以建立一个基类控制器(BaseController),让需要的控制器继承这个控制器即可,在Bas ...

  4. MVC基于角色权限控制--用户管理

    用户管理模块包括 新增用户.修改用户.展示用户列表.删除用户.用户角色分配.用户角色删除.用户权限分配 这里只介绍关于权限有关的 用户角色分配.用户角色删除.用户权限分配 新建控制器 UserInfo ...

  5. rbac(基于角色权限控制)-------权限管理

    权限管理 创建一个rbac和app的应用,这个rbac主要是用来存放权限的,全称叫做基于角色权限控制 一.先看配置文件合适不,给创建的rbac在配置文件里面设置一下 找到INSTALLED_APPS= ...

  6. php_ThinkPHP的RBAC(基于角色权限控制)详解

    一.什么是RBAC 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注. 在RBAC中,权限与角色相关联,用户通 ...

  7. 基于角色权限管理:rbac具体代码实现

    权限管理 创建一个rbac和app的应用,这个rbac主要是用来存放权限的,全称叫做基于角色权限控制 一.先看配置文件合适不,给创建的rbac在配置文件里面设置一下 找到INSTALLED_APPS= ...

  8. ASP.NET MVC 基于角色的权限控制系统的示例教程

    上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...

  9. springboot + 注解 + 拦截器 + JWT 实现角色权限控制

    1.关于JWT,参考: (1)10分钟了解JSON Web令牌(JWT) (2)认识JWT (3)基于jwt的token验证 2.JWT的JAVA实现 Java中对JWT的支持可以考虑使用JJWT开源 ...

随机推荐

  1. 记录一次OOM分析过程

    工具: jstat jmap jhat 1.jstat查看gc情况 S0C.S1C.S0U.S1U:Survivor 0/1区容量(Capacity)和使用量(Used) EC.EU:Eden区容量和 ...

  2. JavaScript之图片操作5

    本次的图片操作是要实现模仿天猫淘宝的放大镜效果,如下图所示: 其实现原理其实很简单,主要就是定位的运用,在上面的图中,左边是一个div,它的大小就是左边图片的大小,我们称为左窗口(原图),红色部分我们 ...

  3. july 大神 要向他学习的东西(已学了)

    交换礼物代码 库 permutations 库 product https://www.cnblogs.com/kaibindirver/p/10714375.html https://www.cnb ...

  4. springboot(二 如何访问静态资源和使用模板引擎,以及 全局异常捕获)

    在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static / ...

  5. Jmeter(三十八)Jmeter Question 之 ‘批量执行SQL语句’

    知识使我们变得玩世不恭,智慧使我们变得冷酷无情,我们思考的太多,感知太少,除了机器,我们更需要人性,除了智慧,我们需要仁慈和善良. ------出自查理卓别林的演讲 前面有提到Jmeter使用JDBC ...

  6. [UE4]控制流

    虽然官方文档说复杂的蓝图循环是会跨域多帧运行,但实际上测试下来,如果在循环体进行大量复杂的运算,不足以在一帧内完成时,游戏就会在当前帧卡住,直到循环结束为止. 一.Switch Switch可以在所有 ...

  7. Mysql 5.7 系列命令 timestamp类型的字段不能设默认值为“0000-00-00 00:00:00” 要设为`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新',

    一.show相关命令语句 1.查看表的索引 show index from tbl_name; 1 table:表名 non_unique:索引是非唯一的?.0否,唯一是索引的.1是,是非唯一索引.( ...

  8. aspnet-api-versioning

    https://github.com/Microsoft/aspnet-api-versioning

  9. oracle基础语句学习

    1.寻找公司所有部门信息 select * from dept; 2.寻找特定列 select dept_name from dept; 3.使用列别名 基本书写方法:列名 列别名 列名 as 列别名 ...

  10. Java基础知识_毕向东_Java基础视频教程笔记(26 反射)

    Java反射机制: 是在运行状态中,对于任意一个类(class)文件,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性.这种动态获取的信息以及动态调用对象的方法的功 ...