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  阅读(252)  评论(0编辑  收藏  举报