对于RBAC的更多描述 就不废话了 相关的参考文档都说的很好啊
参考文档:
/**
* 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> userToRole=new HashMap>();
Map> roleToPermission=new HashMap>();
public SimpleRbac(String name,String role){
//角色拥有权限
List boss=new ArrayList();
boss.add("加薪水");
boss.add("开除人");
List manager=new ArrayList();
manager.add("招新人");
//将角色拥有的权限加入字典 方便查询
roleToPermission.put("boss", boss);
roleToPermission.put("manager", manager);
//用户拥有角色
List bossUser=new ArrayList();
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 控制台输出
加薪水成功
开除人成功
招新人成功
上面只是为了测试 才直接赋值的
权限、角色、用户、角色与权限、用户与角色的关系 可以参考上面的参考文件中的数据库设计示例 进行处理 再获取即可