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开源 ...
随机推荐
- 关于mybatis map foreach遍历
map 数据如下 Map<String,List<Long>>. 测试代码如下: public void getByMap(){ Map<String,List<L ...
- LeetCode——1. Two Sum
一.题目链接:https://leetcode.com/articles/two-sum/ 二.题目大意: 给定一个int型数组A和int值a,要求从A中找到两个数,使得这两个数值的和为a:返回结果为 ...
- [转][html]radio 获取选中状态
方法一: if ($("#checkbox-id").get(0).checked) { // do something } 方法二: if($('#checkbox-id').i ...
- 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。System.Threading.ThreadAbortException
第一次遇到这样的错误 错误语法 try{ Response.Redirect("aa.aspx"); }catch (Exception ex){ Response.Redirec ...
- failed to launch: nice -n 0 /home/hadoop/spark-2.3.3-bin-hadoop2.7/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 spark://namenode1:7077
spark2.3.3安装完成之后启动报错: [hadoop@namenode1 sbin]$ ./start-all.shstarting org.apache.spark.deploy.master ...
- 在UnrealEngine4中使用Google Protobuf
转自:https://blog.csdn.net/or_7r_ccl/article/details/54986393 在UnrealEngine4中使用Google Protobuf ...
- 在django中,执行原始sql语句
extra()方法 结果集修改器,一种提供额外查询参数的机制 使用extra: 1:Book.objects.filter(publisher__name='广东人员出版社').extra(where ...
- django-response对象
HttpResponse 对象则需要 web 开发者自己创建,一般在视图函数中 return 回去.下面我们就来看看 HttpResponse 对象的各种细节 首先,这个对象由 HttpRespons ...
- php创建临时表
$sql= "create temporary table yc_linshi ( img varchar(100) not null, openid varchar(50) not nul ...
- CS229 2.深入梯度下降(Gradient Descent)算法
1 问题的引出 对于上篇中讲到的线性回归,先化一个为一个特征θ1,θ0为偏置项,最后列出的误差函数如下图所示: 手动求解 目标是优化J(θ1),得到其最小化,下图中的×为y(i),下面给出TrainS ...