基于角色的权限管理(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(基于角色权限管理)深度解析 #### 引言 基于角色的访问控制(Role-Based Access Control,简称RBAC)作为一种先进的访问控制机制,近年来在企业和教育机构的资源管理中得到了广泛应用。RBAC的核心理念是将...
基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限管理系统是一种广泛采用的解决方案,它以角色为核心,实现了用户与权限的间接映射,提高了管理效率并降低了复杂性。下面将详细介绍RBAC模型及其在...
基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限管理是一种广泛采用的策略,它将权限与角色关联,而不是直接分配给单个用户。这种设计模式简化了权限管理,提高了系统的灵活性和可扩展性。下面...
《信息安全技术 鉴别与授权 基于角色的访问控制模型与管理规范》这类标准文档就为此目的而制定,旨在提供一个可组合、分层次的RBAC模型,以提升系统的管理和安全性。 总之,RBAC模型通过角色为中心的权限管理,有效...
基于RBAC(Role-Based Access Control,基于角色的访问控制)的通用权限管理构件是一种广泛应用于企业级应用的解决方案,它通过角色来管理和控制用户的访问权限。下面将详细介绍这个系统以及与其相关的技术。 **...
【标题】"一个基于RBAC的权限管理系统"指的是采用Role-Based Access Control(基于角色的访问控制)模型构建的权限管理解决方案。在IT行业中,权限管理是确保系统安全性和数据隐私的关键部分,尤其对于多用户、多...
本文将深入探讨一个基于Go语言、Gin框架、Casbin权限管理库、Ant Design UI组件库以及React前端框架的RBAC(Role-Based Access Control)权限管理脚手架。这个名为"Go-基于GinCasbinAntDesignReact的RBAC权限管理...
在IT行业中,基于角色的权限管理系统(Role-Based Access Control,简称RBAC)是一种常见的权限管理模型,它在大型企业及互联网应用中广泛使用。本文将深入探讨如何利用Spring Boot框架来实现这样的系统,并结合Vue....
基于角色的访问控制技术(Role-Based Access Control, RBAC)是一种有效的权限管理机制,它旨在规范用户对系统资源的访问,防止未经授权的访问和潜在的安全威胁。与传统的自主访问控制(DAC)和强制访问控制(MAC)...
同时本文介绍了基于角色的访问控制理论RBAC 的基本概念,在此基础上设计并实现了一个权限管理系统。实践表明,该设计使业务逻辑与访问控制逻辑分开,解决了传统的权限管理系统中代码重复、分散、混乱的问题,具有...
基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限管理系统是一种广泛采用的解决方案,它以角色为核心,实现了灵活、高效的用户权限分配。本文将深入探讨基于RBAC的权限管理系统的实现原理、设计...
基于RBAC(Role-Based Access Control,基于角色的访问控制)模型的权限管理系统是一种广泛采用的方法,它以角色为核心,实现了灵活、高效的权限分配机制。现在,让我们深入探讨这个话题。 首先,RBAC模型的核心...
在IT行业中,权限管理是系统安全的关键组成部分,而基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限管理模型是一种广泛应用的解决方案。RBAC模型通过将用户权限与角色关联,使得权限分配更加灵活...
RBAC(Role-Based Access Control)即基于角色的访问控制,是一种常见的权限管理系统设计方法。它通过定义不同的角色,并为每个角色分配相应的权限来实现对用户操作的限制,这种方式能够更好地管理和维护系统中的...
基于角色的访问控制(Role-Based Access Control,简称RBAC)作为一种有效的访问控制机制,近年来受到了广泛关注。1996年,Ravi Sandhu等人提出了一种标准的RBAC模型——RBAC96,它通过定义角色、用户与角色之间的...
在此背景下,基于角色的访问控制(Role-Based Access Control,简称RBAC)作为一种有效的访问控制模型应运而生,它简化了权限管理和分配的过程,提高了系统的灵活性和安全性。 #### 二、RBAC的基本概念 **1. RBAC...
标题中的“基于角色权限管理PDM图”指的是在软件开发中使用的一种设计模式,即“基于角色的权限控制”(Role-Based Access Control, RBAC)。PDM是“产品数据管理”(Product Data Management)的缩写,通常用于管理...
这是一个RBAC权限管理系统,即基于角色的用户权限控制,,使用springboot框架开发,UI使用的是layui。。 演示地址:http://116.196.66.248:8090/page/index 欢迎大家下载。。。。另外,建议使用IDEA导入项目。。