RBAC 浅析_示例代码
对于RBAC的更多描述 就不废话了 相关的参考文档都说的很好啊
参考文档:
http://blog.csdn.net/painsonline/article/details/7183613
http://www.cnblogs.com/zc22/archive/2007/10/08/917493.html
http://blog.csdn.net/painsonline/article/details/7183629
http://blog.sina.com.cn/s/blog_65a2fe5d01012riv.html
http://www.blogjava.net/rosen/archive/2005/08/12/9879.html
/** * RBAC模型:基于角色的访问控制 * 五类:用户、角色、权限、用户与角色关系、角色与权限关系 * 用户与角色属于多对多的关系,角色与权限属于多对多的关系 * 用户只与角色关联,而角色可拥有各种权限并可继承 * 用户通过角色与权限进行关联 * @author undergrowth * */
示例代码
演示了不同的人员拥有多种角色 进行相关的操作
package com.undergrowth.rbac; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; /** * RBAC模型:基于角色的访问控制 * 五类:用户、角色、权限、用户与角色关系、角色与权限关系 * 用户与角色属于多对多的关系,角色与权限属于多对多的关系 * 用户只与角色关联,而角色可拥有各种权限并可继承 * 用户通过角色与权限进行关联 * @author undergrowth * */ public class SimpleRbac { Map<String, List<String>> userToRole=new HashMap<String, List<String>>(); Map<String, List<String>> roleToPermission=new HashMap<String, List<String>>(); public SimpleRbac(String name,String role){ //角色拥有权限 List<String> boss=new ArrayList<String>(); boss.add("加薪水"); boss.add("开除人"); List<String> manager=new ArrayList<String>(); manager.add("招新人"); //将角色拥有的权限加入字典 方便查询 roleToPermission.put("boss", boss); roleToPermission.put("manager", manager); //用户拥有角色 List<String> bossUser=new ArrayList<String>(); bossUser.add(role); //默认情况下 拥有招新人的角色 bossUser.add("manager"); userToRole.put(name, bossUser); } /** * 加薪水 * @param user */ public void addSalary(String user){ iteratorUserOperator(user, "加薪水"); } /** * 开除人 * @param user */ public void dismiss(String user){ iteratorUserOperator(user, "开除人"); } /** * 招新人 * @param user */ public void recruit(String user){ iteratorUserOperator(user, "招新人"); } /** * 迭代用户操作 * @param user * @param operator */ private void iteratorUserOperator(String user, String operator) { if(userToRole.get(user)!=null){ for (Iterator iterator = userToRole.get(user).iterator(); iterator.hasNext();) { //获取用户拥有的角色 String role = (String) iterator.next(); if(roleToPermission.get(role)!=null){ //查看用户所对应的角色是否具有此权限 if(roleToPermission.get(role).contains(operator)) { System.out.println(operator+"成功"); return; } } } } //执行到此 表示此用户对应的角色没有相应的权限 System.out.println("你不是boss,没有权限"+operator); return; } }
测试代码
package com.undergrowth.rbac; import junit.framework.TestCase; public class SimpleRbacTest extends TestCase { String name="jack"; String role=""; SimpleRbac simpleRbac=new SimpleRbac(name,role); public void testAddSalary() { simpleRbac.addSalary(name); } public void testDismiss() { simpleRbac.dismiss(name); } public void testRecruit() { simpleRbac.recruit(name); } public void testAll(){ testAddSalary(); testDismiss(); testRecruit(); } }
当role="" 时 因为默认拥有招新人权限 所以testAll之后 控制台信息
你不是boss,没有权限加薪水 你不是boss,没有权限开除人 招新人成功
当role="boss" 的时候 testAll 控制台输出
加薪水成功 开除人成功 招新人成功
上面只是为了测试 才直接赋值的
权限、角色、用户、角色与权限、用户与角色的关系 可以参考上面的参考文件中的数据库设计示例 进行处理 再获取即可
posted on 2014-12-11 11:41 liangxinzhi 阅读(254) 评论(0) 编辑 收藏 举报