居然可以这样(java用户权限设置实现)java基于角色的权限管理,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 NULLAUTO_INCREMENT PRIMARYKEY 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;本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据