您的位置 首页 java

Java,设计,功能权限和数据权限,用户、角色、权限和用户组

权限系统相关概念

ACL(Access Control List),访问控制列表

ACL是一种访问控制机制,包含三个关键要素:用户(User)、资源(Resource)和操作(Operate),当用户请求操作资源时,检查资源的权限列表,如果资源的权限列表中存在该用户的操作权限则允许,否则拒绝。

RBAC(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)=功能权限+数据权限

系统权限设计,数据库表设计(仅供参考):

以下设计,包含了几种模型,实际应用中取其一即可~

功能权限表:

 /** 功能权限 **/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 COMMENT '组件',
`sorted` INT(11) NULL DEFAULT '1' COMMENT '排序值',
`type` INT(5) NULL DEFAULT '0' COMMENT '菜单类型 (0菜单 1按钮)',
`create_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`logical_deleted` INT(1) NULL DEFAULT '0' COMMENT ' 逻辑删除 :0--正常 1--删除'
)
COMMENT='功能权限',ENGINE=InnoDB;  

系统角色表:

 CREATE TABLE `system_role` (
`id` INT(11) NOT NULL AUTO_INCREMENT primary key COMMENT ' 主键 ID',
`name` VARCHAR(100) NOT NULL COMMENT '角色名称',
`code` VARCHAR(100) NOT NULL COMMENT '角色编号',
`pid` INT(11) NULL DEFAULT '-1' COMMENT '父角色ID',
`pid_tree` VARCHAR(200) NOT NULL COMMENT '角色树',
`type` INT(5) NULL DEFAULT '0'  COMMENT '角色类型',
`role_classify` VARCHAR(30) NULL DEFAULT NULL COMMENT '角色分类',
`desc` VARCHAR(255) NULL DEFAULT '' COMMENT '角色描述',
`sorted` INT(11) NULL DEFAULT '1' COMMENT '排序值',
`create_user_id` INT(11) NULL DEFAULT NULL COMMENT '创建用户ID',
`create_user_name` VARCHAR(50) NULL DEFAULT NULL COMMENT '创建用户名称',
`create_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`logical_deleted` INT(1) NULL DEFAULT '0' COMMENT '逻辑删除:0--正常 1--删除'
)
COMMENT='系统角色表',ENGINE=InnoDB;  

组织机构表:

 CREATE TABLE `system_organization` (
`id` INT(11) NOT NULL AUTO_INCREMENT primary key COMMENT '主键ID',
`uuid` VARCHAR(35) NOT NULL UNIQUE COMMENT 'UUID'  ,
   `code` VARCHAR(35) NULL DEFAULT NULL COMMENT '机构编码',
`org_name` VARCHAR(50) NOT NULL COMMENT '机构名称',
`type` INT(5) NULL DEFAULT '0' COMMENT '类型',
`parent_id` INT(11) NULL DEFAULT NULL COMMENT '父机构ID',
`root_path` VARCHAR(50) NULL DEFAULT NULL COMMENT '根全路径',
`level` INT(11) NULL DEFAULT '0' COMMENT '树形级别',
`sub_number` INT(11) NULL DEFAULT NULL COMMENT '子节点个数',
`status` INT(1) NULL DEFAULT '0' COMMENT '状态: 0:正常、 1:停用',
`sorted` INT(11) NULL DEFAULT '1' COMMENT '排序号',
`business_type` INT(5) NULL DEFAULT '0' COMMENT '类型',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '创建人',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '更新人',
`logic_deleted` INT(1) NULL DEFAULT '0' COMMENT '0,正常 1,已删除'
)
COMMENT='组织机构表',ENGINE=InnoDB;  

用户组表:

 CREATE TABLE `system_group` (
   `id` BIGINT(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID' primary KEY,
   `name` VARCHAR(32) NOT NULL COMMENT '组名称',
`sign` VARCHAR(32) NULL DEFAULT NULL COMMENT '组标识',
   `inherit_type`  BIGINT(2) NOT NULL COMMENT '继承类型,0:不继承,1:单继承,2:多继承',
`inherit_id`  BIGINT(11) NOT NULL COMMENT '继承组ID',
   `inherit_name`  BIGINT(11) NOT NULL COMMENT '继承组名称',
`create_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`logical_deleted` INT(1) NULL DEFAULT '0' COMMENT '逻辑删除:0--正常 1--删除'
)
COMMENT='用户组表',ENGINE=InnoDB;  

系统用户表:

 CREATE TABLE `system_user` (
`id` INT(11) NOT NULL AUTO_INCREMENT primary key COMMENT '主键ID',
`username` VARCHAR(60) NOT NULL UNIQUE COMMENT '登录用户名',
`password` VARCHAR(255) NOT NULL COMMENT '登录密码',
`type` INT(5) NULL DEFAULT '0' COMMENT '用户类型',
`real_name` VARCHAR(60) NULL DEFAULT '0' COMMENT '用户真实名称',
`nick_name` VARCHAR(60) NULL DEFAULT '1' COMMENT '用户昵称',
`avatar` VARCHAR(255) NULL DEFAULT NULL COMMENT '用户头像',
`sex` INT(5) NULL DEFAULT '0' COMMENT '用户性别,0:未知,1 男 2 女',
`phone` VARCHAR(30) NULL DEFAULT '' COMMENT '用户电话',
`mobile` VARCHAR(30) NULL DEFAULT '' COMMENT '用户手机号',
`email` VARCHAR(60) NULL DEFAULT '' COMMENT '用户邮箱',
`job_number` VARCHAR(50) NULL DEFAULT ''  COMMENT '用户工号',
`id_number` VARCHAR(30) NULL DEFAULT ''  COMMENT '用户身份证号码',
`user_post` VARCHAR(35) NULL DEFAULT ''  COMMENT '用户职位',
`work_title` VARCHAR(50) NULL DEFAULT NULL COMMENT '工作职称',
`work_post` VARCHAR(50) NULL DEFAULT NULL COMMENT '工作职位',
`user_desc` VARCHAR(35) NULL DEFAULT ''  COMMENT '用户描述',
`work_role` VARCHAR(100) NULL DEFAULT NULL COMMENT '工作角色',
`status` INT(1) NULL DEFAULT '0' COMMENT '用户状态: 0:停用、1:正常',
`master_unit_id` INT(11) NULL DEFAULT '-1' COMMENT '所属部门ID',
`master_unit_name` VARCHAR(60) NULL DEFAULT '' COMMENT '所属部门名称',
`master_unit_path` VARCHAR(100) NULL DEFAULT '' COMMENT '所属部门全路径',
`master_org_id` INT(11) NULL DEFAULT '-1' COMMENT '所属机构ID',
`master_org_name` VARCHAR(60) NULL DEFAULT '' COMMENT '所属机构名称',
`master_org_path` VARCHAR(100) NULL DEFAULT ''  COMMENT '所属机构全路径',
`master_role_id` INT(11) NULL DEFAULT '-1' COMMENT '授权角色ID',
`master_role_name` VARCHAR(60) NULL DEFAULT '' COMMENT '授权角色名称',
`master_role_tree` VARCHAR(60) NULL DEFAULT '' COMMENT '授权角色树',
`master_group_id` INT(11) NULL DEFAULT '-1' COMMENT '授权组ID',
`master_group_name` VARCHAR(60) NULL DEFAULT '' COMMENT '授权组名称',
`user_expire_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '用户过期时间',
`password_expire_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '密码过期时间',
`password_modify_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '密码修改时间',
`password_modify_user` VARCHAR(50) NULL DEFAULT NULL COMMENT '密码修改人',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`logic_deleted` INT(1) NULL DEFAULT '0' COMMENT '0,正常 1,已删除'
)
COMMENT='系统用户表' ENGINE=InnoDB;  

系统角色权限关联表:

 CREATE TABLE `system_role_permission` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
`role_id` INT(11) NULL DEFAULT NULL COMMENT '角色id',
`permission_id` INT(11) NULL DEFAULT NULL COMMENT '权限id',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` VARCHAR(50) NULL DEFAULT '' COMMENT '创建人'
)
COMMENT='系统角色权限关联表',ENGINE=InnoDB;  

系统用户角色关联表:

 CREATE TABLE `system_user_role` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
`user_id` VARCHAR(35) NOT NULL COMMENT '用户id' COLLATE 'utf8_general_ci',
`role_id` VARCHAR(50) NOT NULL COMMENT '角色id' COLLATE 'utf8_general_ci',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` VARCHAR(50) NULL DEFAULT '' COMMENT '创建人'
)
COMMENT='系统用户角色关联表',ENGINE=InnoDB;  

系统用户机构关联表:

 CREATE TABLE `system_user_organization` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
`user_id` INT(11) NULL DEFAULT NULL COMMENT '用户id',
`org_id` INT(11) NULL DEFAULT NULL COMMENT '机构id',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` VARCHAR(50) NULL DEFAULT '' COMMENT '创建人'
)
COMMENT='系统用户机构关联表',ENGINE=InnoDB;  

系统用户权限关联表:

 CREATE TABLE `system_user_permission` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
`user_id` INT(11) NULL DEFAULT NULL COMMENT '用户id',
`permission_id` INT(11) NULL DEFAULT NULL COMMENT '权限id',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` VARCHAR(50) NULL DEFAULT '' COMMENT '创建人'
)
COMMENT='系统用户权限关联表',ENGINE=InnoDB;  

系统组和角色关联表:

 CREATE TABLE `system_group_role` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
`group_id` INT(11) NULL DEFAULT NULL COMMENT '组id',
`role_id` INT(11) NULL DEFAULT NULL COMMENT '用户id',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` VARCHAR(50) NULL DEFAULT '' COMMENT '创建人'
)
COMMENT='系统组和角色关联表',ENGINE=InnoDB;  

系统组继承表:

 CREATE TABLE `system_group_inherit` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
`group_id` INT(11) NULL DEFAULT NULL COMMENT '组id',
`inherit_id` INT(11) NULL DEFAULT NULL COMMENT '继承id',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` VARCHAR(50) NULL DEFAULT '' COMMENT '创建人'
)
COMMENT='系统组继承表',ENGINE=InnoDB;  

系统用户和组关联表:

 CREATE TABLE `system_user_group` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
`user_id` INT(11) NULL DEFAULT NULL COMMENT '用户id',
`group_id` INT(11) NULL DEFAULT NULL COMMENT '组id',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` VARCHAR(50) NULL DEFAULT '' COMMENT '创建人'
)
COMMENT='系统用户和组关联表',ENGINE=InnoDB;  

文章来源:智云一二三科技

文章标题:Java,设计,功能权限和数据权限,用户、角色、权限和用户组

文章地址:https://www.zhihuclub.com/184807.shtml

关于作者: 智云科技

热门文章

网站地图