该项目是基于RBAC3的权限管理系统。
系统使用Shiro作为用户认证与授权管理框架,实现了基于RBAC权限管理功能。
技术栈:SSM + Shiro + Mysql + LayUi(及LayUi第三方插件)+Ehcache + Maven + Tomcat。
功能简介
1.用户登录、认证授权、Session管理、账号登录限制(一个账号只能在一处登录)、登录失败次数限制
2.组织结构管理、职位管理、用户管理、组织分配。
3.角色管理:
3.1 角色基本信息管理。
3.2 角色分层、角色互斥、角色权限继承、角色分配、权限分配、角色用户数限制(待办)等。
4.权限管理。
用户名:admin 密码:123456
用户名:小王 密码:123456
Gitee:springboot-ucan-admin
Github:springboot-ucan-admin
**注:**上图只展示了主要的关联字段,详细表字段,请到classpath路径下的database目录的ucan_admin.sql文件进行查看
表名称说明:
users: 用户表
organization: 组织表(有上下级关系)
post: 职位表(有上下级关系)
roles: 角色表(有上下级关系)
permissions: 权限表(有上下级关系)
user_organization: <用户-组织>关系表
user_post: <用户-职位>关系表
role_organization: <角色-组织>关系表
role_post: <角色-职位>关系表
role_permission: <角色-权限>关系表
mutex_roles: 互斥角色表
**注:**所有数据表仅在代码逻辑上做了外键约束,数据表结构未添加外键约束,可自行在数据表添加外键约束(如需要)。
其他后续可能会用到的表:
group: 其他用户分组(非组织结构内人员或其他特殊情况)
user_group: <用户-其他分组>关系表
role_group: <角色-其他分组>关系表
system: 系统编码表 (用于区分不同系统的权限信息)
cross_role: 跨角色
cross_permission: 跨权限
- JDK 1.8+
- Tomcat-8.5.63
- Spring、SpringMvc 5.2.12.RELEASE
- Mybatis-3.5.9
- shiro-core 1.10.1
- Ehcache
- Mysql 5.7.33
- Layui 2.7.6
- Maven
项目安装、运行步骤
- 在本地准备好Java 8运行环境以及Tomcat。
- 在本地Mysql中新建ucan_admin数据库,运行项目中的ucan_admin.sql文件。
- 修改db.properties文件中的用户名、密码为你本地数据库的。
- 将项目导入自己的开发工具,随后运行即可。
组织架构、职位、用户、角色、权限管理功能概述
a. 组织节点之间有上下级关系,如总公司、分公司、总公司部门、分公司部门等(也可以是你认为合理的任何组织架构);
b. 你可以添加任何节点的同级节点与子节点(右击弹窗操作),其中“超级管理员节点”不可删除,主要为了维护超级管理员与组织结构之间的关系。
c. 任何组织架构节点可直接新增职位,职位也可以有上下级关系。
d. 新增用户时,必须先选择职位,否则不允许操作(后续如果新增了其他类型的分组再进行逻辑修改)。
e. 角色、权限各自的CURD操作。
f. <用户-组织>、<用户-职位>、<用户-角色>、<用户-权限>关系处理逻辑:
g. 最后通过shiro标签或注解进行资源访问权限控制。
1. 登录模块
1.1 通过输入正确的用户名、密码进行系统登录。
1.2 每个账号同一时刻只能在一处成功登录,登录成功后会把之前登录的同一个账号踢出系统。
1.3 账号登录失败次数限制:
用户连续登录失败次数小于5期间,如果有一次登录成功,那么该用户登录失败次数、限制登录时长将清零;
用户连续5次登录失败时,提示"15分钟后再进行登录操作",并开始记录限制登录时长15分钟;
用户连续10次登录失败时,提示"45分钟后再进行登录操作",此时限制登录时长更新为45分钟;
用户连续15次登录失败时,提示"操作太频繁,请联系管理员重置密码",限制登录时长为45分钟;
在限制登录时段内,即使用户输入了正确的用户名、密码,依旧限制用户登录操作;过了限制登录时段,用户登录失败次数、限制登录时长自动清零,用户可以再次进行登录操作。
“记住我”功能:系统Cookie有效期默认为3天,可自行到配置文件里修改。此功能可有可无。
登录成功,系统自动完成用户授权,进行资源访问控制。
2. 仪表盘
board.jsp 加入echarts图表及layui表格的静态页面,未做更进一步的功能开发。
3. 用户管理
3.1 包含组织架构、职位、用户的CURD、分配组织、重置密码等功能,实现对相关信息有组织的管理。
a.删除组织节点的时候,与其关联的节点的资源必须先得到释放。
例如,公司节点有部门节点(关联着职位),则要先删除部门节点(删除职位),部门节点关联着职位,则必须先删除职位;如果职位还分配着用户,则要先删除用户。删除组织结构节点、职位节点时,相应的<组织-角色>、<职位-角色>、<角色-权限>的映射关系会自动解除。
b. 用户信息管理:包含新增用户、查看及修改用户基本信息,为用户分配组织(主要是为了通过组织批量分配角色,达到批量分配权限的目的)。
c. 新增组织、职位、用户的时候,系统自动为其分配基础角色,从而达到分配基础权限的目的。
d. 用户状态为“禁用”时,用户不可登录系统。
e. 个人基本信息设置与密码修改。
4. 角色管理
该模块包含角色基本信息的CURD、角色成员列表、角色权限分配、角色组织(职位)分配、角色互斥管理。
a. 角色有上下级关系,上级角色继承其子孙角色的所有权限,子孙角色不可越权。例如,为会计助理分配权限的时候,只能选择会计已有的权限(通过后台数据及前端代码控制复选框是否可选)。
b. 将角色分配给组织、职位,从而间接达到为用户分配权限的目的。
c. 互斥角色管理:例如,会计和财务审核员不能同时分配给给某一个员工,这也意味着将角色分配给组织和职位的时候,系统会自动检查已勾选的组织、职位已分配的角色与待分配的角色之间是否存在互斥关系,如果存在,则不允许此次角色分配,需要按提示进行相应角色关系处理。
5. 权限管理
权限基本信息的CURD,删除权限时会自动解除<角色-权限>映射关系。
业务逻辑参考:
https://www.cnblogs.com/iceblow/p/11121362.html
https://juejin.cn/post/7121977695197970463
1.角色用户数限制。
2.权限数据动态更新。
3.shiro + jwt 无状态登录认证?
4.用户管理模块 新增 组织/角色“分配角色”的功能。
5.角色管理模块 删除 “角色分配至‘组织/职位’”的功能。
6.后台数据校验?日志管理?
RBAC权限管理系统的具体业务跟具体需求有关,欢迎大家的指正与交流。