zoukankan      html  css  js  c++  java
  • 《分销系统-原创第一章》之“多用户角色权限访问模块问题”的解决思路( 位运算 + ActionFilterAttribute )

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

    数据库用户表结构如下

     

    数据库表梳理:

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

          BankUserInfo: 用户详细表。

              BankAgent: 机构层级表。

     用户权限枚举表如下

      /// <summary>
        /// 用户角色
        /// </summary>
        public enum Role
        {
            /// <summary>
            /// 注册会员
            /// </summary>
            Member = 0,
            /// <summary>
            /// 省行管理员
            /// </summary>
            ProvinceManager = 1,
            /// <summary>
            /// 分行管理员
            /// </summary>
            BranchManager = 2,
            /// <summary>
            /// 总行管理员
            /// </summary>
            Manager = 3,
            /// <summary>
            /// 超级管理员
            /// </summary>
            SuperManager = 4
      }

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

        /// <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 = 0;
    
            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) <= 0 && ((int)_role != memberLoginRole)) { filterContext.Result = new RedirectResult("/Home/RoleError"); } } base.OnActionExecuting(filterContext); } private bool CheckRole() { //验证有没有登陆Cookie操作,省略代码。。。。。。。。 } }

      

    在寂寞的日子里沉淀自己,在程序的日子里找到自己,我为梦想而坚持!

    如果对你有重要帮助,可以打赏一下!


  • 相关阅读:
    分梨
    18岁生日
    马的移动
    摆积木
    杭电2093考试排名
    栈的应用——四则运算表达式求值
    用指针实现对二维数组元素的访问
    用多种方法访问字符数组元素
    fread()函数和fwrite()函数进行文件操作
    hdu-1431 素数回文
  • 原文地址:https://www.cnblogs.com/Kummy/p/3345386.html
Copyright © 2011-2022 走看看