`
云上太阳
  • 浏览: 131323 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于角色的权限管理(RBAC)

阅读更多

基于角色的权限管理(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

 


 

 

 

  • 大小: 14.8 KB
  • 大小: 5.3 KB
1
1
分享到:
评论
1 楼 hsluoyz 2018-09-21  
现在新推出了一个权限框架,叫jCasbin(https://github.com/casbin/jcasbin)。jCasbin采用了元模型的设计思想,支持多种经典的访问控制方案,如ACL、RBAC、ABAC,还支持对RESTful API的控制。现在已经支持Spring Boot、JFinal等Web框架了。需要中文文档的话,可以在百度搜索:jCasbin

相关推荐

    RBAC(基于角色权限管理的说明)

    ### RBAC(基于角色权限管理)深度解析 #### 引言 基于角色的访问控制(Role-Based Access Control,简称RBAC)作为一种先进的访问控制机制,近年来在企业和教育机构的资源管理中得到了广泛应用。RBAC的核心理念是将...

    基于RBAC的权限管理系统

    基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限管理系统是一种广泛采用的解决方案,它以角色为核心,实现了用户与权限的间接映射,提高了管理效率并降低了复杂性。下面将详细介绍RBAC模型及其在...

    基于RBAC权限管理数据库表设计

    基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限管理是一种广泛采用的策略,它将权限与角色关联,而不是直接分配给单个用户。这种设计模式简化了权限管理,提高了系统的灵活性和可扩展性。下面...

    基于角色的访问控制模型(RBAC)

    《信息安全技术 鉴别与授权 基于角色的访问控制模型与管理规范》这类标准文档就为此目的而制定,旨在提供一个可组合、分层次的RBAC模型,以提升系统的管理和安全性。 总之,RBAC模型通过角色为中心的权限管理,有效...

    基于RBAC的通用权限管理构件

    基于RBAC(Role-Based Access Control,基于角色的访问控制)的通用权限管理构件是一种广泛应用于企业级应用的解决方案,它通过角色来管理和控制用户的访问权限。下面将详细介绍这个系统以及与其相关的技术。 **...

    一个基于RBAC的权限管理系统

    【标题】"一个基于RBAC的权限管理系统"指的是采用Role-Based Access Control(基于角色的访问控制)模型构建的权限管理解决方案。在IT行业中,权限管理是确保系统安全性和数据隐私的关键部分,尤其对于多用户、多...

    Go-基于GinCasbinAntDesignReact的RBAC权限管理脚手架

    本文将深入探讨一个基于Go语言、Gin框架、Casbin权限管理库、Ant Design UI组件库以及React前端框架的RBAC(Role-Based Access Control)权限管理脚手架。这个名为"Go-基于GinCasbinAntDesignReact的RBAC权限管理...

    基于角色的权限管理系统(RBAC),采用Springboot开发

    在IT行业中,基于角色的权限管理系统(Role-Based Access Control,简称RBAC)是一种常见的权限管理模型,它在大型企业及互联网应用中广泛使用。本文将深入探讨如何利用Spring Boot框架来实现这样的系统,并结合Vue....

    基于角色的访问控制技术(RBAC)

    基于角色的访问控制技术(Role-Based Access Control, RBAC)是一种有效的权限管理机制,它旨在规范用户对系统资源的访问,防止未经授权的访问和潜在的安全威胁。与传统的自主访问控制(DAC)和强制访问控制(MAC)...

    基于J2EE实现的RBAC系统(包含论文与源码)

    同时本文介绍了基于角色的访问控制理论RBAC 的基本概念,在此基础上设计并实现了一个权限管理系统。实践表明,该设计使业务逻辑与访问控制逻辑分开,解决了传统的权限管理系统中代码重复、分散、混乱的问题,具有...

    基于RBAC的权限管理系统的实现

    基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限管理系统是一种广泛采用的解决方案,它以角色为核心,实现了灵活、高效的用户权限分配。本文将深入探讨基于RBAC的权限管理系统的实现原理、设计...

    基于rbac模型的权限管理系统

    基于RBAC(Role-Based Access Control,基于角色的访问控制)模型的权限管理系统是一种广泛采用的方法,它以角色为核心,实现了灵活、高效的权限分配机制。现在,让我们深入探讨这个话题。 首先,RBAC模型的核心...

    基于RBAC权限管理模型的实现

    在IT行业中,权限管理是系统安全的关键组成部分,而基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限管理模型是一种广泛应用的解决方案。RBAC模型通过将用户权限与角色关联,使得权限分配更加灵活...

    ThinkPHP的RBAC,基于角色的权限控制-下载地址+2011年最新.txt

    RBAC(Role-Based Access Control)即基于角色的访问控制,是一种常见的权限管理系统设计方法。它通过定义不同的角色,并为每个角色分配相应的权限来实现对用户操作的限制,这种方式能够更好地管理和维护系统中的...

    基于RBAC改进模型的角色权限及层次关系分析

    基于角色的访问控制(Role-Based Access Control,简称RBAC)作为一种有效的访问控制机制,近年来受到了广泛关注。1996年,Ravi Sandhu等人提出了一种标准的RBAC模型——RBAC96,它通过定义角色、用户与角色之间的...

    基于角色的访问控制RBAC资料

    在此背景下,基于角色的访问控制(Role-Based Access Control,简称RBAC)作为一种有效的访问控制模型应运而生,它简化了权限管理和分配的过程,提高了系统的灵活性和安全性。 #### 二、RBAC的基本概念 **1. RBAC...

    基于角色权限管理PDM图

    标题中的“基于角色权限管理PDM图”指的是在软件开发中使用的一种设计模式,即“基于角色的权限控制”(Role-Based Access Control, RBAC)。PDM是“产品数据管理”(Product Data Management)的缩写,通常用于管理...

    基于springboot的RBAC权限管理演示系统

    这是一个RBAC权限管理系统,即基于角色的用户权限控制,,使用springboot框架开发,UI使用的是layui。。 演示地址:http://116.196.66.248:8090/page/index 欢迎大家下载。。。。另外,建议使用IDEA导入项目。。

Global site tag (gtag.js) - Google Analytics