RBAC控制权限处理
前言
简单的介绍一下RBAC权限:
就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,RBAC处理多半用于后台系统,通过用户信息判断该用户是否有处理该功能的控制权从而进行的一系列的操作
一、RBAC是什么?
RBAC是一种权限模型,用于判断用户是否有该权限进行操作
二、使用步骤
1.代码展示在于MVC框架下进行展示
代码如下(示例):
首先在Controller的某个方法中进行权限判断
[CheckMyPermission("addPeople")]
public ActionResult 方法名()
{
}
创建文件夹单独放自定义过滤器(Filters)自定义一个类( CheckMyPermissionAttribute )继承AuthorizeAttribute
public class CheckMyPermissionAttribute: AuthorizeAttribute
{
private string PreName; //写一个类方法的构造函数和变量用于接受从控制器传来个判断方法的参数:addPeople
public CheckMyPermissionAttribute(string _PreName)
{
PreName = _PreName;
}
重写AuthorizeAttribute下的OnAuthorization
public override void OnAuthorization(AuthorizationContext filterContext)
{
//获取该用户的信息,因为之前写过一个票据身份验证,后面写的有一个将用户信息存入到上下文HTTPContext中的一个方法,这就直接获取了。
var user = filterContext.HttpContext.User as MyFormsPrincipalDTO<LoginAdminDTO>;
var admin= user.UserData;
//在过滤器中调用Services时,由于当前类不是Autofac创建的,所以不会自动进行注入,所以需要手动获取Service:DependencyResolver.Current.GetService<T>()
IAdminUsersService adminUsersService = DependencyResolver.Current.GetService<IAdminUsersService>();
//调用Service中的方法,传入登录用户的ID,去获取该用户的所有权限
var perlist = adminUsersService.GetPermissionsByUserID(admin.Id);
//判断用户是否有该权限,从而进行操作
if (!perlist.Any(e=>e.Name== PreName))
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new JsonResult() { Data = new AjaxResult(ResultState.Error, "该用户没有权限") };
}
else
{
filterContext.Result = new ContentResult() { Content = "该用户没有权限" };
}
}
}
}
2.读入数据
通过用户ID获取该用户所有角色信息以及角色信息下的所有权限:
public List<PermissionDTO> GetPermissionsByUserID(long id)
{
using (var model=new RentHouseModel())
{
//实例化DTO模型
List<PermissionDTO> permissionList = new List<PermissionDTO>();
var db = new BaseService<T_AdminUsers>(model);
//获取id对应的用户所有数据
T_AdminUsers admin = db.Get(e => e.Id == id);
//循环用户对应下的角色权限,通过userid获取roleid
foreach (var item in admin.T_Roles)
{
//通过循环roleid 查询出preid 并放入集合中并返回
var RoleList = item.T_Permissions.Select(e => new PermissionDTO
{
Name = e.Name
}).ToList();
permissionList.AddRange(RoleList);
}
return permissionList;
}
}
总结
提示:这里对文章进行总结:
这篇文章我简单的介绍了一下RBAC权限模型,RBAC权限模型分为4种,有时间我会一一更新简单的介绍,我是以自己做的项目去进行介绍的,如有异议的地方,请大家多多指正。