权限系统相关概念
ACL(Access Control List),访问控制列表
ACL是一种访问控制机制,包含三个关键要素:用户(User)、资源(Resource)和操作(Operate),当用户请求操作资源时,检查资源的权限列表,如果资源的权限列表中存在该用户的操作权限则允许,否则拒绝。
BAC(Role-Based Access Control),基于角色的访问控制
RBAC模型,三个基础组成部分:用户(User)、角色(Role)和权限(Privilege),通过定义角色的权限,授予用户某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型);
RBAC权限授权,实际上是:Who、What、How,构成了访问权限三元组,也就是:Who对What(Which)进行How的操作。
Who:权限的拥用者或主体,如:Principal、User、Group、 Role、Actor等等;
What:权限针对的对象或资源(Resource、Class);
How:具体的权限(Privilege,正向授权与负向授权);
Operator:操作,表明对What的How操作,也就是:权限(Privilege)+ 资源(Resource);
Role:角色,一定数量的权限的集合,权限分配的单位与载体,目的是隔离用户(User)和权限(Privilege)的逻辑关系;
Group:用户组,权限分配的单位与载体,权限不考虑分配给特定的用户而给组,组可以包括组(以实现权限的继承),也可以包含用户,组内用户继承组的权限,User与Group是多对多的关系,Group可以层次化,以满足不同层级权限控制的要求。
RBAC是一种分析模型,主要分为:基本模型RBAC0(Core RBAC)、角色分层模型RBAC1(Hierarchal RBAC)、角色限制模型RBAC2(Constraint RBAC)和统一模型RBAC3(Combines RBAC);
RBAC0,是RBAC0的核心,定义了能构成RBAC控制系统的最小的元素集合,由四部分构成:用户(User)、角色(Role)、会话(Session)、许可(Pemission),RBAC1、RBAC2、RBAC3都是先后在RBAC0的基础上扩展的。
RBAC1,是RBAC角色的分层模型,在角色中引入了继承的概念,有了继承角色就有了上下级或者等级关系。
RBAC2,是RBAC的约束模型,在RBAC0基础上加入约束的概念,主要引入了:静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。
SSD(Static Separation of Duty)是用户和角色的指派阶段加入的,主要是对用户和角色有如下约束:
1、互斥角色:同一个用户在两个互斥角色中只能选择一个;
2、基数约束:一个用户拥有的角色是有限的,一个角色拥有的许可也是有限的;
3、先决条件约束:用户想要获得高级角色,首先必须拥有低级角色;
DSD(Dynamic Separation of Duty)是会话和角色之间的约束,可以动态的约束用户拥有的角色,如:一个用户可以拥有两个角色,但是运行时只能激活一个角色。
RBAC3,是RBAC1与RBAC2合集,既有角色分层又有约束的一种模型。
RBAC(Resource-Based Access Control),基于资源的权限管理
基于资源的权限管理,以资源为中心进行的访问控制,由于基于角色的权限访问控制,角色所对应的权限发生变化,判断逻辑就必须发生改变,可扩展性差,如果是基于资源的权限访问控制,只需要为资源分配相应的权限,直接判断用户是否拥有该权限即可,可扩展性强。
// 基于角色:
if (user.hasRole("Project Manager") || user.hasRole("Department Manager") ) {
//显示报表按钮
} else {
//不显示按钮
}
// 基于权限:
if (user.isPermitted("projectReport:view:123456")) {
//显示报表按钮
} else {
//不显示按钮
}
其它权限模型
系统权限(System Authority)=功能权限+数据权限
系统权限设计,数据库表设计(仅供参考):
以下设计,包含了几种模型,实际应用中取其一即可~文章来源:https://www.toymoban.com/news/detail-428751.html
功能权限表:文章来源地址https://www.toymoban.com/news/detail-428751.html
/** 功能权限 **/
CREATE TABLE `system_permission` (
`id` BIGINT(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID' primary key,
`name` VARCHAR(32) NOT NULL COMMENT '菜单名称',
`permission` VARCHAR(32) NULL DEFAULT NULL COMMENT '菜单权限标识',
`path` VARCHAR(128) NULL DEFAULT NULL COMMENT '前端URL',
`url` VARCHAR(128) NULL DEFAULT NULL COMMENT '请求链接',
`method` VARCHAR(32) NULL DEFAULT NULL COMMENT '请求方法',
`parent_id` INT(11) NULL DEFAULT NULL COMMENT '父菜单ID',
`icon` VARCHAR(32) NULL DEFAULT NULL COMMENT '图标',
`component` VARCHAR(64) NULL DEFAULT NULL C
到了这里,关于Java,设计,功能权限和数据权限,用户、角色、权限和用户组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!