`
cwqcwq
  • 浏览: 74778 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

权限管理:RBAC(基于角色的访问控制)的实现

阅读更多
基本需求:
一个用户可拥有多个角色,一个角色可授予多个用户
不可对用户直接授权
角色有优先级的概念,即当某个用色具有多个用色时,按优先级高低来判断权限
实现模块级控制

使用到的技术:
spring
springMVC
hibernate
ajax(DWR)
JSTL函数

基本实现:

实体类:
用户User(id,username,...)
角色Role(id,rolename,...)
用户用色UserRole(id,User,Role,orderNo[角色在这个用户中的优先级])
模块Module(id,url,...)
访问控制列表ACL(id,roleId,moduleId,aclState[授权状态,用其后四位(bit)来表示CRUD操作])

核心操作说明:
1、User
1)添加或更新用户拥有的角色
  addOrUpdateUserRole(int userId,int roleId,int orderNo)
  根据userId和roleId查询用户角色表,如果有对应的记录,则更新orderNo,如无,则创建一条新记录。
2)查询该用户拥有的所有角色
  List<UserRole> searchUserRoles(int userId)
  查询用户角色表中,用户ID等于userId的所有记录,返回List
2、ACL
1)查询ACL
  ACL findACL(int roleId, int resourceSn)
  即:根据角色ID和资源ID返回ACL实例
2)授权
  public void addOrUpdatePermission(int roleId, int resourceSn, int permission, boolean yes)
  即:授予哪个角色对哪个资源的什么权限
  先根据角色ID和资源ID查询对应的ACL实例,如有,则更新,如没有,则设置其相关值

	/**
	 * acl实例跟主体和资源关联
	 * 针对此实例进行授权:某种操作是否允许
	 * @param permission 只可以取值0,1,2,3
	 * @param yes true表示允许,false表示不允许
	 */
	public void setPermission(int permission,boolean yes){
		int tmp = 1;
		tmp = tmp << permission;
		if(yes){
			aclState |= tmp;
		}else{
			aclState &= ~tmp;
		}
	}


3)认证
  public boolean hasPermission(int userId, int resourceSn, int permission)
  即:根据用户ID查询出该用户是否对某资源具有何种权限
  先查询用户角色表,查询出该用户拥有的所有角色,再根据角色ID和资源ID查询ACL实例,一旦有ACL实例,则返回permission的权限,如果未发现ACL实例,则说明没有对应的权限

	/**
	 * 获得ACL授权
	 * @param permission C/R/U/D权限
	 * @return 授权标识:允许/不允许/不确定
	 */
	public int getPermission(int permission){
		int tmp = 1;
		tmp = tmp << permission;
		tmp &= aclState;
		if(tmp != 0){
			return ACL_YES;
		}
		return ACL_NO;
	}


4)搜索某个用户拥有读取权限的模块列表
  List searchModules(int userId)

页面认证:
  使用JSTL自定义函数实现:

tag.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  version="2.0">
    
  <tlib-version>1.0</tlib-version>
  <short-name>cwq</short-name>
  <uri>http://cwqcwq.iteye.com/oa/functions</uri>
  
  <function>
    <name>hasPermission</name>
    <function-class>com.cwq.oa.web.SecurityFunctions</function-class>
    <function-signature>boolean hasPermission(int, java.lang.String,int)</function-signature>
  </function>
</taglib>


页面使用:

<%@ taglib prefix="mytag"  uri="http://cwqcwq.iteye.com/oa/functions" %>
<c:if test="${mytag:hasPermission(username,1,3) }">
	<a href="#">删除</a><br>
</c:if>	

分享到:
评论
1 楼 liuxiang00435057 2012-10-17  
能把源码共享下吗,或者发一份给我,liuxiang00435057@163.com 谢谢

相关推荐

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

    详细介绍了RBAC的访问控制逻辑,以及在实践中的最佳应用实践(以电子政务系统为例),定义了核心、层次和受限制的RBAC模型。

    RBAC基于角色的访问控制

    基于角色的访问控制:对于在网站环境中的访问控制方法,基于...角色访问控制(RBAC)引入了Role的概念,目的是为了隔离User(即动作主体,Subject)与Privilege(权限,表示对Resource的一个操作,即Operation+Resource)。

    基于RBAC和SSH的权限管理系统的设计和实现

    摘要:基于角色的访问控制模型RBAC 能够很好地解决复杂的权限管理问题。流行的J2EE 框架SSH 为RBAC 提供灵活的实现平台。介绍RBAC 模型的基本状况,并作适当改进。在具体的项目中,在SSH 框架基础上,使用Spring 的...

    RBAC访问控制模型综述

    基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大...

    rbac:一个实现基于角色的访问控制的认证和授权库

    这是一个实现基于角色的访问控制的身份验证和授权库,它将被插入到 Spring Security Framework 中。 特征 基于角色的授权。 可以使用 SPEL 表达式进行配置。 本地身份验证提供程序。 密码使用 HMAC-SHA256 编码。 ...

    论文研究-使用会话期上下文检查的RBAC模型:RBACCCS.pdf

    基于角色的访问控制(RBAC)被推荐来代替传统的访问控制模型。应用到信息系统中时,需要解决RBAC的控制粒度问题。我们需要一个能够基于上下文进行细粒度访问控制的RBAC模型,即基于对象实例上下文上的访问控制。对...

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

    访问控制是通过某种...目前流行的访问控制模型有自主访问控制模型(Discretionary Access Control,DAC)、强制访问控制模型(Mandatory Access Control, MAC)和基于角色的访问控制模型(Role-Based Access Control,RBAC)

    自主访问控制实验——DAC 基于RBAC1的访问控制实验

    题目1:自主访问控制实验;...(5) 对用户的角色信息进行修改,通过访问控制实验,体现不同层次的角色访问权限的差别 (6) 对上述实验情况下访问成功和不成功的两种情形均给出结果 写的不是很好,仅供参考。

    django-auth-rbac:尝试为Django实现基于角色的访问控制

    django-auth-rbac 尝试为Django实现基于角色的访问控制(ANSI / INCITS 359-2004) 支持的RBAC功能: 核心RBAC 分级RBAC 静态职责分离(SSD)基本概念的角色角色提供用户和权限之间的间接级别,通常代表作业功能。...

    论文研究-基于属性和RBAC的混合扩展访问控制模型.pdf

    针对单纯的RBAC模型在动态授权、细粒度授权等方面存在的不足,将属性与RBAC相结合,并保持RBAC以角色为中心的核心思想,提出了两者结合的混合扩展访问控制模型HARBAC。模型支持基于属性的用户—角色分配、角色—权限...

    thinkphp rbac 实例

    thinkphp rbac 实例基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。 在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些...

    基于角色访问控制(RBAC)的数据表,RBAC.sql

    基于角色访问控制(RBAC)的数据表:用户表,角色表,权限表,用户角色关联表,角色权限关联表

    django:基于角色的访问控制

    基于角色的访问控制RBAC 的 Djnago 示例存储库。 包括Django 模型抽象使用tastypie休息API 基于访问令牌的授权资源curl --dump-header -H "Accept: application/json" -H "Content-type: application/json" -X POST ...

    通用角色访问控制(RBAC) 三层架构简单实例

    角色访问控制(RBAC)引入了Role的概念,目的是为了隔离User(即动作主体,Subject)与Privilege(权限,表示对Resource的一个操作,即Operation+Resource)。 Role作为一个用户(User)与权限(Privilege)的代理层,解耦...

    SpringBoot + Apache Shiro1.9.1 最新版本详细教程,基于RBAC角色访问、安全管理框架、用户角色权限

    0、重点!重点!...1、本教程适用所有开发人员简单易懂,结合文章教程与demo示例。...5、基于RBAC五张表:用户表 tb_user、角色表tb_role、权限表tb_permission、用户角、表tb_user_role、角色权限tb_role_permissio

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

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

    Flask框架实现的RBAC权限管理系统源码

    项目概述:本项目管理系统基于流行的Python Flask框架,实现了一套完整的RBAC(基于角色的访问控制)权限管理功能。项目采用多种编程语言和技术栈,确保了前端的丰富交互和后端的高效稳定。 技术组成: - 主要编程...

    基于Django和Vue的RBAC权限控制后台管理系统源码

    项目概述:本源码为基于角色基础访问控制(RBAC)模型的中小型应用开发平台,采用前后端分离架构。后端基于Python的Django框架和Django REST Framework实现,前端则使用Vue.js配合ElementUI进行构建。移动端支持通过...

    gin-rbac:用于Gin Web框架的基于角色的访问控制(RBAC)中间件

    银杏gin-rbac是框架的基于角色的访问控制(RBAC)中间件,用于过滤未经授权的REST API访问。术语和概念资源资源每个资源都是一个API端点。 (例如:/ api / products /:id)手术GET / PUT / DELETE / POST允许允许...

    rbac:基于分层角色的NodeJS访问控制

    RBAC (基于分层角色的访问控制) RBAC是NodeJS的授权库。 :party_popper: 现在,我们通过实现支持DynamoDB存储。动机我需要基于ExpressJS的项目的基于分层角色的访问控制。 我有一个要求。 此结构必须永久存储在...

Global site tag (gtag.js) - Google Analytics