MVC基于角色权限控制--菜单展示
在用户成功登陆后台页面后,我们需要将当前用户拥有的权限通过菜单的形式展现出来,将未具备的权限隐藏
新建一个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基于角色权限控制--菜单展示的更多相关文章
- MVC基于角色权限控制--数据库设计
在网站后台设计过程中都会遇上权限控制这一问题 当前较为流行的解决方案是基于角色的权限管理 基本思路如下 分别建立 用户信息表.角色信息表.权限信息表 让用户和角色关联,角色和权限关联,当用户访问时,通 ...
- MVC基于角色权限控制--管理角色
管理角色分为 添加角色.删除角色.修改角色.给角色分配权限(修改角色权限) 新建RoleInfoController继承BaseController namespace CZBK.ItcastOA.W ...
- MVC基于角色权限控制--权限过滤
用户访问服务器实际上就是访问控制器下的方法,因此在权限控制就是控制器方法的访问权限 为了方便控制,我们可以建立一个基类控制器(BaseController),让需要的控制器继承这个控制器即可,在Bas ...
- MVC基于角色权限控制--用户管理
用户管理模块包括 新增用户.修改用户.展示用户列表.删除用户.用户角色分配.用户角色删除.用户权限分配 这里只介绍关于权限有关的 用户角色分配.用户角色删除.用户权限分配 新建控制器 UserInfo ...
- rbac(基于角色权限控制)-------权限管理
权限管理 创建一个rbac和app的应用,这个rbac主要是用来存放权限的,全称叫做基于角色权限控制 一.先看配置文件合适不,给创建的rbac在配置文件里面设置一下 找到INSTALLED_APPS= ...
- php_ThinkPHP的RBAC(基于角色权限控制)详解
一.什么是RBAC 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注. 在RBAC中,权限与角色相关联,用户通 ...
- 基于角色权限管理:rbac具体代码实现
权限管理 创建一个rbac和app的应用,这个rbac主要是用来存放权限的,全称叫做基于角色权限控制 一.先看配置文件合适不,给创建的rbac在配置文件里面设置一下 找到INSTALLED_APPS= ...
- ASP.NET MVC 基于角色的权限控制系统的示例教程
上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...
- springboot + 注解 + 拦截器 + JWT 实现角色权限控制
1.关于JWT,参考: (1)10分钟了解JSON Web令牌(JWT) (2)认识JWT (3)基于jwt的token验证 2.JWT的JAVA实现 Java中对JWT的支持可以考虑使用JJWT开源 ...
随机推荐
- quartz中设置Job不并发执行
使用quartz框架可以完成定时任务处理即Job,比如有时候我们设置1个Job每隔5分钟执行1次,后来会发现当前Job启动的时候上一个Job还没有运行结束,这显然不是我们期望的,此时可以设置quart ...
- JSON: 介绍、应用
ylbtech-JSON: 介绍.应用 JSONP(JSON with Padding)是 JSON 的一种“使用模式”,可以让网页从别的域名(网站)那获取资料,即跨域读取数据. 为什么我们从不同的 ...
- js中获取事件对象的方法小结
原文地址:http://jingyan.baidu.com/article/d8072ac4594d6cec95cefdac.html 事件对象 的获取很简单,很久前我们就知道IE中事件对象是作为全局 ...
- host文件的工作原理及应用
host文件的工作原理及应用 Hosts文件是一个用于存储计算机网络中节点信息的文件,它可以将主机名映射到相应的IP地址,实现DNS的功能,它可以由计算机的用户进行控制. 一.Hosts文件基本介绍 ...
- OSI七层
应用层 应用程序的通信服务 telnet.HTTP.FTP.NFS.SMTP 表示层 定义数据格式和加密 加密.ASCII 会话层 如何开始.控制.结束一个会话,包括多个双向消息的控制和管理,以便在只 ...
- 控件之ReleLayout属性
Android:控件布局(相对布局)RelativeLayout RelativeLayout是相对布局控件:以控件之间相对位置或相对父容器位置进行排列. 相对布局常用属性: 子类控件相对子类控件:值 ...
- Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap
网上也有好多方法我没有试成功,不过我将maven的conf setting.xml里的 阿里镜像给注释就可以了,你们也可以试试
- [UE4]子控件Child Widget顶层容器选择
如果父级容器是Canvas,则可以直接设置尺寸.放到其他widget的时候也会保持设定好的尺寸(而不管父容器是什么类型).
- 通过创建临时表合并某一个库的hive小文件
#!/bin/bash #需要指定hive中的库名 #set -x set -e DB=$1 if [ -z $1 ];then echo "Usage:$0 DbName" ex ...
- C# 生成日期维度值
1. 时间维度表结构 /*==============================================================*/ /* Table: dim_date_day ...