• 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 控制台输出

    加薪水成功
    开除人成功
    招新人成功
    


    上面只是为了测试  才直接赋值的  

    权限、角色、用户、角色与权限、用户与角色的关系 可以参考上面的参考文件中的数据库设计示例  进行处理  再获取即可


  • 相关阅读:
    jquery $.each遍历json数组方法
    JQuery插件编写
    创建JAVASCRIPT对象3种方法
    微信开发流程
    有关索引那点事
    获取数据库内所有的表和表内字段的信息
    asp.net MVC4 异步文件上传
    QT学习:01 工程文件详解
    QT学习:00 介绍
    Linux 系统编程 学习 总结
  • 原文地址:https://www.cnblogs.com/liangxinzhi/p/4275541.html
Copyright © 2020-2023  润新知