基于角色的权限管理(RBAC)
——我一直不太信任自己的记忆力,所以我把它们都写下来
这几天一直想把web项目中菜单的管理梳理一遍,今天终于写了个小Demo。在这个过程中融合了linux权限管理的思想。具体的阐述记录在代码中,我相信这个注释将会非常详细。
需要说明的是这个Demo只是单纯的一种思想,是不能直接用于商业开发的。这个demo对菜单的数量很敏感,不能太多。菜单多一个,存储都是以指数级增加的。
项目结构如下图:
Main.java中是菜单权限控制的核心
package com.albert.test; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import com.albert.model.Menu; import com.albert.model.Person; import com.albert.model.Role; import com.albert.service.BaseService; /** * @{#} Main.java Created on 2015-11-19 上午11:57:18 * 主测试方法 */ public class Main { /** * @param args */ public static void main(String[] args) { BaseService service = new BaseService(); List<Role> roles = service.initRole(); List<Menu> menus = service.initMenu(); /** * 模拟当前登录用户,目前写死为张三,ID是1 */ Person curPerson = service.initPerson().get(0); /** * 当前登录用户的角色 */ Role curRole = null; for(Role r : roles){ if(curPerson.getRoleId()==r.getId()){ curRole = r; break; } } System.out.println("当前用户:"+ curPerson.getName()); System.out.println("当前角色:"+ curRole.getName()); /** * 当前用户的menu */ List<Menu> curMenus = new ArrayList<Menu>(); /** * 当前用户menu的父menu */ Set<Menu> parentMenus = new HashSet<Menu>(); /** * 这个for语句块是这个demo的核心加重点。 * t_menu表中所有子菜单都有一个不重复的sn,比如《用户新增》的sn是0, * 《用户修改》的sn是1; * * 某个角色(t_role)对以上两个菜单有权限,那么acl = 2^0+2^1, * 也就是3。看到这里是不是一头雾水? * * 验证这个角色是否有《用户修改》权限,只需要 &运算符,即 2^1 & 3, * 结果是2,非0即说明拥有该权限。 * * 这个原理如下: * 3 二进制 0000 0011 * 2 二进制 0000 0010 * &运算后 0000 0010 非0,则有这个权限 */ for(Menu m : menus){ Double sn = Math.pow(2d, m.getSn()); if((sn.intValue() & curRole.getAcl())!=0){ curMenus.add(m); for(Menu n : menus){ if(m.getPid() == n.getId()){ parentMenus.add(n); } } } } //显示菜单(打印到控制台) for(Menu m : parentMenus){ System.out.println("》"+m.getName()); for(Menu n : curMenus){ if(n.getPid() == m.getId()){ System.out.println(" |"+n.getName()); } } } } }
运行main方法打印控制台输出如下
项目svn地址:http://code.taobao.org/svn/TestRbac/TestRbac
相关推荐
针对基于角色的访问控制(RBAC)模型在模拟复杂组织结构和权限继承关系方面的不足,提出了基于角色扩展的RBAC模型——MR-RBAC。该模型在角色集和权限集之间引入了最小角色集,并形式化定义了模型的基本集合和相关...
同时本文介绍了基于角色的访问控制理论RBAC 的基本概念,在此基础上设计并实现了一个权限管理系统。实践表明,该设计使业务逻辑与访问控制逻辑分开,解决了传统的权限管理系统中代码重复、分散、混乱的问题,具有...
RBAC--RBAC--RBAC--RBAC--RBAC
基于角色的权限管理系统(RBAC),采用Springboot开发。系统简单易懂,前端使用Vuejs、Quasarframework开发,页面简洁美观
详细介绍了RBAC的访问控制逻辑,以及在实践中的最佳应用实践(以电子政务系统为例),定义了核心、层次和受限制的RBAC模型。
本资源是基于RBAC权限管理模型思想实现的完整JAVA代码,有数据库脚本,对于基于RBAC思想的开发具有很好的启发与帮助作用。
基于RBAC的权限管理组件的设计与实现 RBAC基于角色的权限管理
基于rbac模型的权限管理系统,角色,权限,用户等的权限分配
一个RBAC的专题 自己做的 应该挺好理解的
ThinkPHP的RBAC,基于角色的权限控制-下载地址+2011年最新.txt 就是这么强大...
基于RBAC改进模型的角色权限及层次关系分析
0、重点!重点!...1、本教程适用所有开发人员简单易懂,结合文章教程与demo示例。...5、基于RBAC五张表:用户表 tb_user、角色表tb_role、权限表tb_permission、用户角、表tb_user_role、角色权限tb_role_permissio
竞赛信息管理系统。管理员、教师、学生基本信息管理。对比赛记录,赛事信息的增删改查。并基于角色进行权限控制(RBAC).zip
基于RBAC的B/S管理信息系统权限管理的研究与应用,柯敏,杨春金,在B/S模式中,管理信息系统的权限管理由于实际需求的复杂性,传统的基于RBAC(角色访问控制)的权限管理方式已不能满足实际的需要��
基于角色访问控制(RBAC)的数据表:用户表,角色表,权限表,用户角色关联表,角色权限关联表
本篇文章主要介绍了利用 Vue.js 实现前后端分离的RBAC角色权限管理,非常具有实用价值,需要的朋友可以参考下
模型支持基于属性的用户—角色分配、角色—权限分配、角色激活、会话角色权限缩减和权限继承等动态访问控制功能。对模型的元素、关系、约束和规则等进行了形式化描述。通过引入权限过滤策略对会话角色的有效权限进行...
基于SpringBoot+Vue 前后端分离的RBAC权限管理系统(源码+数据库) ## 项目介绍 **一个基于SpringBoot + Vue + Element UI 开发的权限管理系统** - 角色权限精确到菜单、接口访问 - 前后端通过jwt进行认证状态管理...
这是一个RBAC权限管理系统,即基于角色的用户权限控制,,使用springboot框架开发,UI使用的是layui。。 演示地址:http://116.196.66.248:8090/page/index 欢迎大家下载。。。。另外,建议使用IDEA导入项目。。
在学校成绩管理系统中,用户包括学生、教师,管理人员,有学生、教师和管理人员三大角色,教师角色又可细化普通教师和具有管理职能教师,如班主任、年级主任、教务人员等,系统的权限就是系统提供给用户的功能。...