rabc java 程序实例_RBAC 浅析_示例代码

本文通过一个简单的Java程序实例,展示了RBAC(基于角色的访问控制)模型的工作原理,包括用户、角色、权限之间的多对多关系。用户通过角色与权限关联,角色可继承权限。提供了测试代码来演示不同角色的操作行为。
摘要由CSDN通过智能技术生成

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

加薪水成功

开除人成功

招新人成功

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值