# springboot-ucan-admin **Repository Path**: justgoahead007/springboot-ucan-admin ## Basic Information - **Project Name**: springboot-ucan-admin - **Description**: 基于RBAC3的权限管理系统,Springboot版本。 该系统使用Shiro作为用户认证与授权管理框架,实现了基于RBAC权限管理功能。 技术栈:Springboot2.7.9+ Shiro + Mysql + LayUI + Freemarker。 欢迎交流学习! - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: https://gitee.com/mrcen - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2023-07-17 - **Last Updated**: 2023-07-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringBoot-Ucan-Admin #### 介绍 该项目是基于RBAC3的权限管理系统,是ucan-admin的springboot版本。
使用的技术栈:SpringBoot2.7.9 + Shiro1.11.0 + Mysql5.7 + LayUi(及LayUi第三方插件)+ FreeMarker。
**功能简介**
1.用户登录、认证授权、Session管理、账号登录限制(一个账号只能在一处登录)、登录失败次数限制。
2.组织结构管理、职位管理、用户管理、组织分配。
3.角色管理:
3.1 角色基本信息管理。
3.2 角色分层、角色互斥、角色权限继承、角色分配、权限分配、角色用户数限制(待办)等。
4.权限管理。
用户名:admin 密码:123456
用户名:小王 密码:123456
[Gitee:ucan-admin](https://gitee.com/mrcen/ucan-admin)
[Github:ucan-admin](https://github.com/cenlm/ucan-admin)
#### 数据库表关系图 **1.数据库表关系图:**
![Image text](https://gitee.com/mrcen/ucan-admin/raw/master/src/main/webapp/imgs/db-erd.png)
**表名称说明:**
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: 跨权限
#### 运行环境 1. JDK 1.8+ 2. SpringBoot2.7.9 3. Mybatis-3.5.9 4. Shiro1.11.0 5. Mysql 5.7.33 6. Layui 2.7.6 7. Tomcat 9 8. Freemarker **项目安装、运行步骤** 1. 在本地准备好Java 8运行环境。 2. 在本地Mysql中新建ucan_admin数据库,运行项目中的ucan_admin.sql文件。 3. 修改application-xxx.yml文件中的用户名、密码为你本地数据库的。 4. 执行UcanAdminApplication.java的main方法。 ### 功能描述 **组织架构、职位、用户、角色、权限管理功能概述**
a. 组织节点之间有上下级关系,如总公司、分公司、总公司部门、分公司部门等(也可以是你认为合理的任何组织架构);
b. 你可以添加任何节点的同级节点与子节点(右击弹窗操作),其中“超级管理员节点”不可删除,主要为了维护超级管理员与组织结构之间的关系。
c. 任何组织架构节点可直接新增职位,职位也可以有上下级关系。
d. 新增用户时,必须先选择职位,否则不允许操作(后续如果新增了其他类型的分组再进行逻辑修改)。
e. 角色、权限各自的CURD操作。
f. <用户-组织>、<用户-职位>、<用户-角色>、<用户-权限>关系处理逻辑:
![图片](https://gitee.com/mrcen/ucan-admin/raw/master/src/main/webapp/imgs/user-role-perm.png)
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://www.cnblogs.com/iceblow/p/11121362.html)
[https://juejin.cn/post/7121977695197970463](https://juejin.cn/post/7121977695197970463)
#### 待办事项 1.角色用户数限制。
2.权限数据动态更新。
3.shiro + jwt 无状态登录认证?
4.用户管理模块 新增 组织/角色“分配角色”的功能。
5.角色管理模块 删除 “角色分配至‘组织/职位’”的功能。
6.后台数据校验?日志管理?
RBAC权限管理系统的具体业务跟具体需求有关,欢迎大家的指正与交流。
#### 效果图 ![Image text](https://gitee.com/mrcen/ucan-admin/raw/master/src/main/webapp/imgs/login-effect.png)
![Image text](https://gitee.com/mrcen/ucan-admin/raw/master/src/main/webapp/imgs/home-effect.png)
![Image text](https://gitee.com/mrcen/ucan-admin/raw/master/src/main/webapp/imgs/user-effect.png)
![Image text](https://gitee.com/mrcen/ucan-admin/raw/master/src/main/webapp/imgs/role-effect.png)
![Image text](https://gitee.com/mrcen/ucan-admin/raw/master/src/main/webapp/imgs/permission-effect.png)
![Image text](https://gitee.com/mrcen/ucan-admin/raw/master/src/main/webapp/imgs/setting-effect.png)