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

2022-11-23,,,,

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

数据库用户表结构如下

数据库表梳理:

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 ).doc》

下载本文的Word格式文档,以方便收藏与打印。