rbac框架java_基于Spring-Security安全框架的RBAC权限管理顶

rbac-security

这是一个基于简单的RBAC模型,结合Spring Security开发的权限管理模块。

一、RBAC模型介绍

RBAC是Role-Based Access Control的缩写,意思就是基于角色的权限访问控制。

基本思想: 对系统的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。 同样用户被分配了多个适当的角色,那么该用户就拥有了被分配多个角色的所有权限。

优点: 不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。

该系统的RBAC模型——

RBAC_model.png?raw=true

二、项目思想

本项目将对用户、角色、权限三者之间的关联状态概念交给系统管理员与数据库,对外依然具有RBAC的概念。但是在项目的权限管理中,项目只维护用户与权限的关系。

当用户登录成功后立即在数据库查询该用户所具有的角色,再根据所拥有的角色查询对应的权限——然后将这些权限赋予用户。

该项目的所有接口都是基于权限级别的身份校验,而非角色级别的身份校验。

优点: 节省了对用户与角色、角色与权限之间关系的维护,对身份与接口之间的校验细化程度高,粒度级小。

三、项目技术架构

[ ] 开发工具: Maven(项目构建管理)

[ ] 开发环境: JDK8、MySql5.5.25

[ ] 技术选型 ——

核心框架:SpringBoot 2.2.1.RELEASE

视图框架:SpringMVC 2.2.1.RELEASE

安全框架:SpringSecurity 2.2.1.RELEASE

持久层框架:Mybatis 3.5.2

数据库连接池:Druid 1.1.10

快速开发插件:Mybatis-Plus 3.2.0

API构建工具:Swagger 2 2.9.2

四、需求说明

一个用户可以拥有多个角色,该用户需拥有这些角色所具有权限的并集。

权限的控制在于两方面——前端目录菜单的展示、后端接口的访问拦截。

用户登录成功后立即返回该用户可访问的菜单结构。

五、项目结构

management-security

├─config 配置

│ ├─SwaggerConfig.java 关于Swagger2的配置类

│ └─WebConfig.java 关于Web的配置类

├─controller 视图

├─exception 异常

├─generator 代码生成

├─mapper Mybatis接口

├─model 模型

│ └─vo 业务模型

├─security 权限模块

│ ├─constants 常量

│ │ └─SecurityConstants.java 关于权限的常量设置

│ │

│ ├─handler 拦截器

│ │ ├─AuthenticationFailureHandlerImpl.java 认证失败的行为

│ │ └─AuthenticationSuccessHandlerImpl.java 认证成功的行为

│ │

│ ├─impl security的接口实现

│ │ └─UserDetailsServiceImpl.java 用户认证实现

│ │

│ └─SecurityConfig.java 权限配置类

├─service 业务接口

│ └─impl 业务接口实现

├─utils 工具包

│ └─Result.java 结果JSON封装

├──resources

│ ├─mapper MyBatis文件

│ │

│ ├─db MySql文件

│ │ └─data MySql数据文件

│ │

│ └─application.yml 全局配置文件

六、重点代码解析

(注意: 这里我只展示重点代码,具体代码参考文初的GitHub地址)

1、权限数据模型

/**

* 权限表

*

* @author zuoyu

* @since 2019-11-22

*/

@Data

@NoArgsConstructor

@EqualsAndHashCode(callSuper = false)

@Accessors(chain = true)

@TableName("security_authority")

@ApiModel(value = "Authority对象", description = "权限表")

public class Authority extends Model{

private static final long serialVersionUID = 1L;

@ApiModelProperty(value = "主键")

@TableId(value = "AUTHORITY_ID", type = IdType.AUTO)

private Integer authorityId;

@ApiModelProperty(value = "权限名称")

@TableField("AUTHORITY_NAME")

private String authorityName;

@ApiModelProperty(value = "权限目录名称")

@TableField("AUTHORITY_CONTENT")

private String authorityContent;

@ApiModelProperty(value = "权限菜单名称")

@TableField("AUTHORITY_MENU")

private String authorityMenu;

@ApiModelProperty(value = "权限目录URL")

@TableField("AUTHORITY_MENU_URL")

private String authorityMenuUrl;

@ApiModelProperty(value = "创建时间")

@TableField("AUTHORITY_CREAT_TIME_STAMP")

private Date authorityCreatTimeStamp;

@ApiModelProperty(value 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值