RBAC 权限入门
RBAC 权限入门
RBAC概念
RBAC:Role Based Access Control,核心是用户只和角色关联,而某角色可以拥有各种各样的权限并可继承。
RBAC白话介绍
RBAC有很多模型,最简单的就是Core RBAC。说白了就是User用户, Role角色, Permission许可 三个对象。
l 角色有多个操作许可
l 当用户分配了一个角色,就有了这个操作。
那么在程序里面怎么实现呢?很简单。
首先我们有一系列操作,例如Open File, Close File, Save File等。在代码里面可以一些方法。
然后我们有多个角色,例如Manager, Worker。
他们之间的对应关系如下,一般写在配置文件或者保存在数据库。
当进行权限验证的时候,就是看这个用户的角色是否包含这个动作的permission.
{
Dictionary<string, string> userToRole = new Dictionary<string, string>();
Dictionary<string, List<string>> roleToPermission = new Dictionary<string, List<string>>();
public RBCA()
{
//初始化manager的权限
string manager = "Manager";
List<string> managerlist = new List<string>();
managerlist.Add("OpenFile");
managerlist.Add("CloseFile");
managerlist.Add("SaveFile");
//初始化worker的权限
string worker = "Worker";
List<string> workerlist = new List<string>();
workerlist.Add("OpenFile");
roleToPermission.Add(manager, managerlist);
roleToPermission.Add(worker, workerlist);
//初始化用户pixysoft的角色
string user = "pixysoft";
userToRole.Add(user, manager);
}
public void OpenFile(string user)
{
string role = userToRole[user];
//检测权限
if (!roleToPermission[role].Contains("OpenFile"))
return;
Console.Write("Open file succeed!");
}
public void CloseFile(string user)
{
string role = userToRole[user];
//检测权限
if (!roleToPermission[role].Contains("CloseFile"))
return;
Console.Write("CloseFile succeed!");
}
public void SaveFile(string user)
{
string role = userToRole[user];
//检测权限
if (!roleToPermission[role].Contains("SaveFile"))
return;
Console.Write("SaveFile succeed!");
}
}
一个超级简单的RBAC就体现出来的,但是没有任何实用价值。下面我会使用AOP思想去实现这个权限系统。
RBAC优缺点分析
优点在于:
l 易用和高效的授权方式 :用户在进行授权时只需对角色进行授权,之后将相应的角色分配给用户即可。
l 简便和高效的授权模型维护 :在技术角度来讲,进行授权模型的维护上因为基本只需要维护关联模型而显得简单而高效。
缺点在于:
l 复杂的权限校验 :在进行权限校验时需要不断的遍历和递规,造成了性能的影响。
l 对于数据权限的不够支持 :没有明确的数据权限模型,可以看到在经过重构的数据权限模型其实已经和 RBAC 模型有一定的出入,而且在数据权限的校验上实现起来是非常的低效。
参考资料
http://www.blogjava.net/BlueDavy/archive/2005/05/18/4745.html
http://www.blogjava.net/renyangok/archive/2006/12/06/85838.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!