dw网站建设的数据库,西安百度竞价外包,wordpress 插件开发教程,下载官方版微信RBAC 权限入门 RBAC概念 RBAC#xff1a;Role Based Access Control#xff0c;核心是用户只和角色关联#xff0c;而某角色可以拥有各种各样的权限并可继承。 RBAC白话介绍 RBAC有很多模型#xff0c;最简单的就是Core RBAC。说白了就是User用户, Role角色, Permission许可…RBAC 权限入门 RBAC概念 RBACRole Based Access Control核心是用户只和角色关联而某角色可以拥有各种各样的权限并可继承。 RBAC白话介绍 RBAC有很多模型最简单的就是Core RBAC。说白了就是User用户, Role角色, Permission许可 三个对象。 l 角色有多个操作许可 l 当用户分配了一个角色就有了这个操作。 那么在程序里面怎么实现呢很简单。 首先我们有一系列操作例如Open File, Close File, Save File等。在代码里面可以一些方法。 然后我们有多个角色例如Manager, Worker。 他们之间的对应关系如下一般写在配置文件或者保存在数据库。 当进行权限验证的时候就是看这个用户的角色是否包含这个动作的permission.class RBCA { Dictionarystring, string userToRole new Dictionarystring, string(); Dictionarystring, Liststring roleToPermission new Dictionarystring, Liststring(); public RBCA() { //初始化manager的权限 string manager Manager; Liststring managerlist new Liststring(); managerlist.Add(OpenFile); managerlist.Add(CloseFile); managerlist.Add(SaveFile); //初始化worker的权限 string worker Worker; Liststring workerlist new Liststring(); 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