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开源 ...
随机推荐
- Android开发之五大布局篇
一.Android中常用的5大布局方式有以下几种: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 相对布局(RelativeLayout):相对其它组件的布局方式. 绝对布局 ...
- java翻转字符串中的单词
效果: 输入: "java and python" 输出: "avaj dna nohtyp" 代码: 版本1: 不考虑字符串开头有空格,单词间有多个空格空格的 ...
- P2430严酷的训练
传送 这个题的题干很长,长到令人恶心 这个题的p乍一看好像没有卵用,但其实他很有用(废话).这里的“费用”不再是tw[i](wky做第i道题的时间),而是tw[p[i]](wky做第i道题所对应的知识 ...
- spring4.0之九:websocket简单应用
Spring 4.0的一个最大更新是增加了websocket的支持.websocket提供了一个在web应用中的高效.双向的通讯,需要考虑到客户端(浏览器)和服务器之间的高频和低延时消息交换.一般的应 ...
- 跨域的案例 以百度接口/手写接口为例,还有jQuery写法
仅在js部分输入即可 百度接口的案例 <script> function fn(data){ console.log(data) } </script> <script ...
- Oracle 锁的概念
用scott/orcl登录并且模拟数据 SQL> conn scott/orclConnected.SQL> create table tt(id int primary key); Ta ...
- centos6.5网络虚拟化技术
一.配置KVM虚拟机NAT网络 1.创建脚本执行权限 下面是NAT启动脚本 # vi /etc/qemu-ifup-NAT 赋予权限 # chmod +x /etc/qemu-ifup-NAT 下载镜 ...
- 静态路由、Track与NQA联动配置举例
原文: http://www.h3c.com/cn/d_201708/1018729_30005_0.htm#_Toc488338732 1.6.4 静态路由.Track与NQA联动配置举例 1. ...
- [UE4]缓存选项 Is volatile
volatile:易变的,不稳定的; (液体或油) 易挥发的; 爆炸性的; 快活的,轻快的; UI中的Is Volatile选项:意思当前控件是容易变化的. 这个是一个性能上的优化. 默认情况下UI都 ...
- [UE4]蓝图调试
1.蓝图下断点:选择蓝图节点按F9下断点:再按一下F9就会去掉断点. 2.游戏运行到断点会自动这暂停,鼠标移到某个变量上面,会显示该变量的值. 3.按F10执行下一步. 4.蓝图调试没有跳出函数的功能 ...