《分销系统-原创第一章》之“多用户角色权限访问模块问题”的解决思路( 位运算 + ActionFilterAttribute )
此项目需求就是根据给用户分配的权限,进行相应的权限模块浏览功能,因为项目不是很大,所以权限没有去用一张表去存,我的解决思路如下,希望大家给点建议。
数据库用户表结构如下:

数据库表梳理:
BankUserMember:权限分配表(1-省行管理员, -分行管理员, 0-网点负责人(普通会员),-超级管理员)。
BankUserInfo: 用户详细表。
BankAgent: 机构层级表。
用户权限枚举表如下:
/// <summary>
/// 用户角色
/// </summary>
public enum Role
{
/// <summary>
/// 注册会员
/// </summary>
Member = ,
/// <summary>
/// 省行管理员
/// </summary>
ProvinceManager = ,
/// <summary>
/// 分行管理员
/// </summary>
BranchManager = ,
/// <summary>
/// 总行管理员
/// </summary>
Manager = ,
/// <summary>
/// 超级管理员
/// </summary>
SuperManager =
}
普通会员查看功能如下代码:
/// <summary>
/// 会员产看功能
/// </summary>
[Role(Entity.Enum.Role.Member)]
public class PerformanceController : BaseController
{
[NoCache]
public ActionResult Index(int? page)
{
//todo:
}
}
(省行,分行)管理员查看功能如下代码:
/// <summary>
/// (省行,分行)管理员查看功能
/// </summary>
[Role(Entity.Enum.Role.ProvinceManager | Entity.Enum.Role.BranchManager)]
public class AdminPerformanceController : BaseController
{
[NoCache]
public ActionResult Index(int? page)
{
//todo:
}
}
权限 RoleAttribute过滤器 如下代码:
/// <summary>
/// Action角色访问控制
/// </summary>
public class RoleAttribute : ActionFilterAttribute
{
/// <summary>
/// 控制角色
/// </summary>
public Entity.Enum.Role _role { get; set; }
/// <summary>
/// 登录角色
/// </summary>
public int memberLoginRole = ; public RoleAttribute() { }
/// <summary>
/// 验证方式和角色进行构造
/// </summary>
/// <param name="flag"></param>
public RoleAttribute(Entity.Enum.Role role)
{
_role = role;
} public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!CheckRole())
{
string urlreffer = filterContext.HttpContext.Request.UrlReferrer == null ? string.Empty
: filterContext.HttpContext.Request.UrlReferrer.AbsoluteUri;
if (string.IsNullOrEmpty(urlreffer))
urlreffer = filterContext.HttpContext.Request.Url == null ? string.Empty : filterContext.HttpContext.Request.Url.AbsoluteUri; string locationUrl = string.Empty;
locationUrl = TsingDa.Common.WebConfig.GetWebConfig("website_url", "") + "/Home/Login?ReturnUrl=" +
filterContext.HttpContext.Server.UrlEncode(urlreffer);
RedirectResult loginUrl = new RedirectResult(locationUrl);
filterContext.Result = loginUrl;
}
else
{
//---------【验证用户的控制器的访问权限(利用位运算灵活的解决多角色问题)】---------
if (((int)_role & (int)memberLoginRole) <= && ((int)_role != memberLoginRole))
{
filterContext.Result = new RedirectResult("/Home/RoleError");
}
} base.OnActionExecuting(filterContext);
} private bool CheckRole()
{
//验证有没有登陆Cookie操作,省略代码。。。。。。。。
}
}
《分销系统-原创第一章》之“多用户角色权限访问模块问题”的解决思路( 位运算 + ActionFilterAttribute )的更多相关文章
- 多用户角色权限访问模块问题”的解决思路( 位运算 + ActionFilterAttribute )
如果你还是不太懂位运算,请看我的文章:那些年我们一起遗忘的位运算! 下面是我在这次项目中学习到的,我眼中的位运算的应用!主要是实现 通知的3个操作: 1. 置顶 2. 设为首页 3. 同时为 “ ...
- swift系统学习第一章
第一节:变量,常量,类型推断,字符,字符串 //swift学习第一节 /* 变量 常量 类型推断 字符 字符串 */ import UIKit //变量 var str = "swift&q ...
- 一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目
在spring cloud系列章节中,本来已经写了几个章节了,但是自己看起来有些东西写得比较杂,所以重构了一下springcloud的章节内容,新写了本章节,先教大家在工作中如何搭建一个多模块的spr ...
- python之如何爬取一篇小说的第一章内容
现在网上有很多小说网站,但其实,有一些小说网站是没有自己的资源的,那么这些资源是从哪里来的呢?当然是“偷取”别人的数据咯.现在的问题就是,该怎么去爬取别人的资源呢,这里便从简单的开始,爬取一篇小说的第 ...
- RDIFramework.NET ━ 9.9 角色权限管理 ━ Web部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 9.9 角色权限管理 -Web部分 角色权限管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移 ...
- ABP Zero 导航菜单之角色权限
本文的项目是官网生成,项目名称为XX,WEB为MVC,以Users权限模块为例解说文章. 1.定义PermissionNames PermissionNames是一个静态类,它在/XX.Core/Au ...
- 【黑金原创教程】【TimeQuest】【第一章】TimeQuest 静态时序分析模型的概念
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/ ...
- 【黑金原创教程】【Modelsim】【第一章】Modelsim仿真的扫盲文
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...
- 第一章 Android系统移植与驱动开发概述
本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容. 所谓“移植”是指为特定的自己的设备,如手机定制Android的过程.自己开发一些程序(移植)装载在设备上,使得Andro ...
随机推荐
- 1068: [SCOI2007]压缩 - BZOJ
Description 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一 ...
- 指针强转和void*
C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个地址就是硬件访问的依据,而名字只是提供给程序员的 ...
- uva 11029
看了别人的解法 发现了 modf 这个函数 取小数部分 /*********************************************************************** ...
- android2.3 -添加自定义按键:作唤醒功能 .
最近需要做个唤醒功能,当按键的时候android系统唤醒并点亮屏,在长按键中,系统不能在进入睡眠. 驱动方面: 1:在平台设备文件中添加 一个按键,定义为唤醒源! \arch\arm\mach-s5p ...
- cf div2 235 D
D. Roman and Numbers time limit per test 4 seconds memory limit per test 512 megabytes input standar ...
- java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁
1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数 ...
- ZOJ 3757 Alice and Bob and Cue Sports(模拟)
题目链接 题意 : 玩台球.Alice 和 Bob,一共可以进行m次,Alice 先打.有一个白球和n个标有不同标号的球,称目标球为当前在桌子上的除了白球以外的数值最小的球,默认白球的标号为0.如果白 ...
- linux入门教程(六) Linux文件与目录管理
在linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如在上一章提到的/root/.ssh/authorized_keys 这就是一个文件的路径.如果你告诉系统这个文件的路径,那么系统 ...
- tomcat免重启随意更改java代码 提高开发效率
转载:http://developer.51cto.com/art/201012/241243.htm 做为了一个java开发人员,总是为因为要增加一个类,或是增加删除一个方法,甚至修改一个小处代码而 ...
- MyBatis,动态传入表名,字段名的解决办法
转载:http://luoyu-ds.iteye.com/blog/1517607 今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的, 本来这也不是 ...