使用sa-token 进行权限控制
支持路由鉴权+注解鉴权
框架地址:https://sa-token.dev33.cn/
项目整体思路:本项目采用RBAC(基于角色的权限访问控制)用户关联多个角色,角色关联菜单/权限。sys_menu 表中通过type字段区别是菜单还是权限。通过当前登录用户角色获取对应的菜单集合和权限集合返给前端,前端使用menu表中url 或者 code码来校验当前页面按钮等相关权限。后端采用请求路由来校验权限。
项目包含功能:
- 多数据源
- knifej 3.0文档
- redis
- 项目初始化sql 在resources目录下。
- 登录、注册、退出、获取登录状态、获取菜单列表、获取权限码列表等权限使用闭合回路。
一、在 springboot 项目中使用sa-token
1.1 依赖引入
<properties>
<sa-token.version>1.29.0</sa-token.version>
<commons-pool2.version>2.7.0</commons-pool2.version>
<fastjson.version>1.2.56</fastjson.version>
<knife4j.version>3.0.3</knife4j.version>
<dynamic.datasource.version>3.0.0</dynamic.datasource.version>
<mybatis-plus.version>3.5.0</mybatis-plus.version>
</properties>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>${sa-token.version}</version>
</dependency>
<!--集成redis-->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis</artifactId>
<version>${sa-token.version}</version>
</dependency>
<!-- 集成jwt-->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-jwt</artifactId>
<version>${sa-token.version}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>${commons-pool2.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${dynamic.datasource.version}</version>
</dependency>
1.2 表结构
1.2.1 用户表
CREATE TABLE `sys_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL COMMENT '用户名称',
`nickname` varchar(128) DEFAULT NULL COMMENT '昵称',
`password` varchar(128) NOT NULL COMMENT '密码',
`salt` varchar(32) NOT NULL COMMENT '盐',
`logged` datetime NOT NULL COMMENT '最后登录时间',
`deleted` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户表';
1.2.2 菜单/权限表
菜单权限表使用type字段区分-是菜单还是权限(是主菜单还是左侧菜单…等等)
CREATE TABLE `sys_menu` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pid` int(11) NOT NULL COMMENT '父级ID',
`title` varchar(128) NOT NULL COMMENT '文本内容',
`url` varchar(512) DEFAULT NULL COMMENT '链接的url',
`icon` varchar(0) DEFAULT NULL COMMENT '菜单的icon',
`code` varchar(125) NOT NULL COMMENT '权限标识符:对于后台控制类定义。示例:user:list',
`type` int(1) NOT NULL DEFAULT '0' COMMENT '权限类型:1- 目录 | 2 - 菜单-主菜单 | 3 - 按钮 | 5-左侧菜单',
`ord` int(11) NOT NULL DEFAULT '0' COMMENT '菜单 排序 数值越大越靠前',
`status` int(1) NOT NULL DEFAULT '0' COMMENT '状态: 0-正常 | 1-封禁 | 2-正常且禁止封禁',
`deleted`