此项目需求就是根据给用户分配的权限,进行相应的权限模块浏览功能,因为项目不是很大,所以权限没有去用一张表去存,我的解决思路如下,希望大家给点建议。

数据库用户表结构如下

数据库表梳理:

BankUserMember:权限分配表(1-省行管理员, -分行管理员, 0-网点负责人(普通会员),-超级管理员)。

BankUserInfo: 用户详细表。

BankAgent: 机构层级表。

用户权限枚举表如下

  1. /// <summary>
  2. /// 用户角色
  3. /// </summary>
  4. public enum Role
  5. {
  6. /// <summary>
  7. /// 注册会员
  8. /// </summary>
  9. Member = ,
  10. /// <summary>
  11. /// 省行管理员
  12. /// </summary>
  13. ProvinceManager = ,
  14. /// <summary>
  15. /// 分行管理员
  16. /// </summary>
  17. BranchManager = ,
  18. /// <summary>
  19. /// 总行管理员
  20. /// </summary>
  21. Manager = ,
  22. /// <summary>
  23. /// 超级管理员
  24. /// </summary>
  25. SuperManager =
  26. }

普通会员查看功能如下代码

  1. /// <summary>
  2. /// 会员产看功能
  3. /// </summary>
  4. [Role(Entity.Enum.Role.Member)]
  5. public class PerformanceController : BaseController
  6. {
  7. [NoCache]
  8. public ActionResult Index(int? page)
  9. {
    //todo:
  10. }
  11. }

(省行,分行)管理员查看功能如下代码:

  1. /// <summary>
  2. /// (省行,分行)管理员查看功能
  3. /// </summary>
  4. [Role(Entity.Enum.Role.ProvinceManager | Entity.Enum.Role.BranchManager)]
  5. public class AdminPerformanceController : BaseController
  6. {
  7. [NoCache]
  8. public ActionResult Index(int? page)
  9. {
    //todo:
  10. }
  11. }

权限 RoleAttribute过滤器 如下代码:

  1. /// <summary>
  2. /// Action角色访问控制
  3. /// </summary>
  4. public class RoleAttribute : ActionFilterAttribute
  5. {
  6. /// <summary>
  7. /// 控制角色
  8. /// </summary>
  9. public Entity.Enum.Role _role { get; set; }
  10. /// <summary>
  11. /// 登录角色
  12. /// </summary>
  13. public int memberLoginRole = ;
  14.  
  15. public RoleAttribute() { }
  16. /// <summary>
  17. /// 验证方式和角色进行构造
  18. /// </summary>
  19. /// <param name="flag"></param>
  20. public RoleAttribute(Entity.Enum.Role role)
  21. {
  22. _role = role;
  23. }
  24.  
  25. public override void OnActionExecuting(ActionExecutingContext filterContext)
  26. {
  27. if (!CheckRole())
  28. {
  29. string urlreffer = filterContext.HttpContext.Request.UrlReferrer == null ? string.Empty
    : filterContext.HttpContext.Request.UrlReferrer.AbsoluteUri;
  30. if (string.IsNullOrEmpty(urlreffer))
  31. urlreffer = filterContext.HttpContext.Request.Url == null ? string.Empty : filterContext.HttpContext.Request.Url.AbsoluteUri;
  32.  
  33. string locationUrl = string.Empty;
  34. locationUrl = TsingDa.Common.WebConfig.GetWebConfig("website_url", "") + "/Home/Login?ReturnUrl=" +
    filterContext.HttpContext.Server.UrlEncode(urlreffer);
  35. RedirectResult loginUrl = new RedirectResult(locationUrl);
  36. filterContext.Result = loginUrl;
  37. }
  38. else
  39. {
  40. //---------【验证用户的控制器的访问权限利用位运算灵活的解决多角色问题)】---------
  41. if (((int)_role & (int)memberLoginRole) <= && ((int)_role != memberLoginRole))
  42. {
  43. filterContext.Result = new RedirectResult("/Home/RoleError");
  44. }
  45. }
  46.  
  47. base.OnActionExecuting(filterContext);
  48. }
  49.  
  50. private bool CheckRole()
  51. {
  52. //验证有没有登陆Cookie操作,省略代码。。。。。。。。
  53. }
  54. }

《分销系统-原创第一章》之“多用户角色权限访问模块问题”的解决思路( 位运算 + ActionFilterAttribute )的更多相关文章

  1. 多用户角色权限访问模块问题”的解决思路( 位运算 + ActionFilterAttribute )

    如果你还是不太懂位运算,请看我的文章:那些年我们一起遗忘的位运算! 下面是我在这次项目中学习到的,我眼中的位运算的应用!主要是实现 通知的3个操作: 1.  置顶 2.  设为首页 3.  同时为 “ ...

  2. swift系统学习第一章

    第一节:变量,常量,类型推断,字符,字符串 //swift学习第一节 /* 变量 常量 类型推断 字符 字符串 */ import UIKit //变量 var str = "swift&q ...

  3. 一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目

    在spring cloud系列章节中,本来已经写了几个章节了,但是自己看起来有些东西写得比较杂,所以重构了一下springcloud的章节内容,新写了本章节,先教大家在工作中如何搭建一个多模块的spr ...

  4. python之如何爬取一篇小说的第一章内容

    现在网上有很多小说网站,但其实,有一些小说网站是没有自己的资源的,那么这些资源是从哪里来的呢?当然是“偷取”别人的数据咯.现在的问题就是,该怎么去爬取别人的资源呢,这里便从简单的开始,爬取一篇小说的第 ...

  5. RDIFramework.NET ━ 9.9 角色权限管理 ━ Web部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 9.9  角色权限管理 -Web部分 角色权限管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移 ...

  6. ABP Zero 导航菜单之角色权限

    本文的项目是官网生成,项目名称为XX,WEB为MVC,以Users权限模块为例解说文章. 1.定义PermissionNames PermissionNames是一个静态类,它在/XX.Core/Au ...

  7. 【黑金原创教程】【TimeQuest】【第一章】TimeQuest 静态时序分析模型的概念

      声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/ ...

  8. 【黑金原创教程】【Modelsim】【第一章】Modelsim仿真的扫盲文

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  9. 第一章 Android系统移植与驱动开发概述

    本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容. 所谓“移植”是指为特定的自己的设备,如手机定制Android的过程.自己开发一些程序(移植)装载在设备上,使得Andro ...

随机推荐

  1. mysql数据恢复

    [1] 当数据库被删除后的恢复方法   首先建立一个测试用的数据库.  mysql -u root -p123123   ← 用root登录到MySQL服务器  Enter password:  ←  ...

  2. 设置配置文件信息时的classpath

    首先 classpath是指 WEB-INF文件夹下的classes目录  其中:lib和classes下文件访问优先级的问题: lib>classes  classpath 和 classpa ...

  3. PAT-乙级-1054. 求平均值 (20)

    1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...

  4. struct2访问或添加request/session/application

    访问或添加request/session/application 1 通过ActionContext //这样放置 public String execute()  {     ActionConte ...

  5. hdu 4888

    网络流建模,建模不难,难在找环: #include<cstdio> #include<algorithm> #include<vector> #include< ...

  6. sgu 138

    自己猜测了一下  按比赛次数 从大到小排  然后类似于模拟 先排胜的场次 当只剩一场 将它定义为败 #include <cstdio> #include <cstdlib> # ...

  7. 6 个基于 jQuery 的表单向导插件推荐

    表单向导可以很好地引导用户进行一步一步的操作,从而降低用户错误输入的几率.尽管互联网中有大量的类似插件,但真正好用的不多. 本文整理了6个比较优秀的表单向导插件,希望能够为你带来帮助. 1. Smar ...

  8. 《head first java 》读书笔记(五)

    Updated 2014/04/09 P581--P615 如何组织.包装与部署Java程序. 部署的选择 本机: Executable Jar 两者之间的结合: Web Start, RMI app ...

  9. Unity3D脚本中文系列教程(七)

    http://dong2008hong.blog.163.com/blog/static/4696882720140311445677/?suggestedreading&wumii Unit ...

  10. javax.mail.MessagingException: 501 Syntax: HELO hostname Linux端异常解决

    在项目里面使用javamail在window环境正常,放在服务器上面的时候抛出异常javax.mail.MessagingException: 501 Syntax: HELO hostname ,原 ...