使用SSM+Shiro+Layui框架,基于RBAC3模型开发的权限管理系统

项目简介

该项目是基于RBAC3的权限管理系统。
系统使用Shiro作为用户认证与授权管理框架,实现了基于RBAC权限管理功能。
技术栈:SSM + Shiro + Mysql + LayUi(及LayUi第三方插件)+Ehcache + Maven + Tomcat。

功能简介:

1.用户登录、认证授权、Session管理、账号登录限制(一个账号只能在一处登录)、登录失败次数限制
2.组织结构管理、职位管理、用户管理、组织分配。
3.角色管理:
3.1 角色基本信息管理。
3.2 角色分层、角色互斥、角色权限继承、角色分配、权限分配、角色用户数限制(待办)等。
4.权限管理。

用户名:admin 密码:123456
用户名:小王 密码:123456

Gitee:ucan-admin
Github:ucan-admin

Gitee:springboot-ucan-admin
Github:springboot-ucan-admin

数据表关系图:

注:上图只展示了主要的关联字段,详细表字段,请到WEB-INF 目录下的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: 跨权限

运行环境:

  1. JDK 1.8+
  2. Tomcat-8.5.63
  3. Spring、SpringMvc 5.2.12.RELEASE
  4. Mybatis-3.5.9
  5. shiro-core 1.10.1
  6. Ehcache
  7. Mysql 5.7.33
  8. Layui 2.7.6
  9. Maven

项目安装、运行步骤

  1. 在本地准备好Java 8运行环境以及Tomcat。
  2. 在本地Mysql中新建ucan_admin数据库,运行项目中的ucan_admin.sql文件。
  3. 修改db.properties文件中的用户名、密码为你本地数据库的。
  4. 将项目导入自己的开发工具,随后运行即可。

功能描述

组织架构、职位、用户、角色、权限管理功能概述

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权限管理系统的具体业务跟具体需求有关,欢迎大家的指正与交流。

系统效果图:

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSMSpring+SpringMVC+MyBatis)是一种Java Web开发框架,被广泛使用于企业级应用的开发中。Spring提供了依赖注入和面向切面编程的特性,Spring MVC是一种轻量级的Web框架,而MyBatis则是一种持久层框架,可以方便地操作数据库。 Layui是一个简单易用、高效轻量级的前端框架,可以帮助前端开发者快速搭建Web界面。Layui提供了丰富的UI组件和灵活的样式定制功能,能够帮助开发者实现页面的快速展示和交互。 Shiro是一个强大且易于使用Java安全框架,提供了认证、授权、会话管理和加密等安全控制功能。Shiro能够帮助开发者轻松地实现用户身份验证和访问控制,提高系统的安全性。 综合上述三者,使用SSM框架可以简化Java Web的开发流程,通过Spring提供的依赖注入和面向切面编程,我们能够更好地管理和维护项目的各个组件。使用SpringMVC可以方便地开发出符合MVC设计模式的Web应用程序,而MyBatis则提供了对数据库的便捷访问,可以避免直接编写繁琐的SQL语句。 在前端方面,Layui的轻量级特性和丰富的UI组件能够加快前端开发的速度,使页面的搭建变得简单高效。 而使用Shiro可以保护我们的应用程序,通过身份验证和访问控制,可以确定用户的身份并限制其权限,提高系统的安全性。 总的来说,SSMLayuiShiro三者结合使用可以提高我们开发的效率和安全性,同时也能够提供用户友好的界面体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值