基本需求:
一个用户可拥有多个角色,一个角色可授予多个用户
不可对用户直接授权
角色有优先级的概念,即当某个用色具有多个用色时,按优先级高低来判断权限
实现模块级控制
使用到的技术:
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>
分享到:
相关推荐
《信息安全技术 鉴别与授权 基于角色的访问控制模型与管理规范》这类标准文档就为此目的而制定,旨在提供一个可组合、分层次的RBAC模型,以提升系统的管理和安全性。 总之,RBAC模型通过角色为中心的权限管理,有效...
在Kubernetes中,基于角色的权限控制(Role-Based Access Control, RBAC)是一种关键的安全机制,用于管理和控制用户或服务对集群资源的访问权限。RBAC允许管理员精细地定义哪些用户、用户组或服务账户可以执行什么...
在 Kubernetes 项目中,基于角色的权限控制(Role-Based Access Control,简称 RBAC)是一种非常重要的授权机制。它负责完成授权工作,确保 Kubernetes 中的 API 对象的访问安全。RBAC 的核心概念包括 Role、Subject...
基于角色的权限控制(Role-Based Access Control,简称 RBAC)是一种在 Kubernetes 集群中实施权限管理的关键机制。在互联网级别的大规模集群中,RBAC 用于确保只有经过授权的用户或服务能够对资源进行操作,从而...
### RBAC基于角色的访问控制 #### 一、引言 在网络安全领域,访问控制机制是确保信息系统安全性的重要组成部分。其中,**基于角色的访问控制(Role-Based Access Control,简称RBAC)**作为一种灵活且高效的访问...
其中,基于角色的访问控制(Role-Based Access Control,简称RBAC)是其安全策略的重要组成部分,旨在通过定义不同的用户角色和权限,确保系统的安全性,同时简化了多用户环境下的权限管理。 #### RBAC的重要性 在...
基于角色的访问控制技术(Role-Based Access Control, RBAC)是一种有效的权限管理机制,它旨在规范用户对系统资源的访问,防止未经授权的访问和潜在的安全威胁。与传统的自主访问控制(DAC)和强制访问控制(MAC)...
基于角色的访问控制(Role-Based Access Control,简称RBAC)作为一种先进的访问控制机制,近年来在企业和教育机构的资源管理中得到了广泛应用。RBAC的核心理念是将权限与角色而非个人用户绑定,这样不仅简化了权限...
基于角色的访问控制(Role-Based Access Control,简称RBAC)是一种广泛应用于现代企业级系统权限管理的模型。这种模型的核心思想是将用户与权限的关系通过角色进行间接关联,用户通过扮演不同的角色来获取相应的...
基于角色的访问控制(Role-Based Access Control,RBAC)是一种现代的访问控制策略,它将权限管理和用户身份相结合,提供了一种更为灵活且高效的管理方式。传统的访问控制模型,如自主访问控制(DAC)和强制访问控制...
基于角色的访问控制(RBAC)原理讲解 基于角色的访问控制(RBAC)是一种广泛应用于信息系统中的访问控制机制。其基本思想是在用户和访问权限之间引入角色的概念,将用户和角色联系起来,通过对角色的授权来控制用户...
本笔记主要探讨了如何利用FastAPI和Vue3框架实现基于角色的访问控制(Role-Based Access Control,简称RBAC)来管理菜单、路由、按钮以及接口的权限。我们将深入探讨FastAPI的特性、Vue3的优势以及RBAC的原理,以及...
基于角色的访问控制(RBAC,Role-Based Access Control)是一种现代的权限管理机制,它将权限与用户分离,通过角色这一中间实体进行关联。在RBAC模型中,用户被赋予不同的角色,每个角色对应一组特定的权限。这种...
下面我们将详细探讨基于角色访问控制的实施方法。 1. 角色定义:首先,我们需要定义系统中的各种角色,这些角色通常对应于组织内的职位或者职责。例如,系统管理员、普通用户、财务人员等。角色的定义应明确其对应...
基于角色的访问控制(RBAC)通过角色这一中间层,实现了用户与权限的有效隔离,大大简化了权限管理的过程。它的灵活性和可扩展性使其成为现代企业安全管理的重要工具之一。对于任何需要处理复杂权限管理的企业来说,...
常见的实现方法有基于角色的访问控制、基于权限的访问控制和基于身份的访问控制等。 7. 案例分析:论文对基于RBAC模型的访问控制方法在实际商务系统中的应用进行了描述。该方法可以实现安全、灵活和高效的访问控制...
项目概述:本项目管理系统基于流行的Python Flask框架,实现了一套完整的RBAC(基于角色的访问控制)权限管理功能。项目采用多种编程语言和技术栈,确保了前端的丰富交互和后端的高效稳定。 技术组成: - 主要编程...
在IT行业中,权限管理是系统安全的关键组成部分,而基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限管理模型是一种广泛应用的解决方案。RBAC模型通过将用户权限与角色关联,使得权限分配更加灵活...
基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限管理系统是一种广泛采用的解决方案,它以角色为核心,实现了用户与权限的间接映射,提高了管理效率并降低了复杂性。下面将详细介绍RBAC模型及其在...
这是一个实现基于角色的访问控制的身份验证和授权库,它将被插入到 Spring Security Framework 中。 特征 基于角色的授权。 可以使用 SPEL 表达式进行配置。 本地身份验证提供程序。 密码使用 HMAC-SHA256 编码。 ...