后端资源权限控制使用Spring Security权限注解控制,比如下面这个资源只有拥有"user:add"权限的用户可以访问:
```
/**
* 保存用户包括角色和部门
*
* @param userDto
* @return
*/
@PostMapping
@PreAuthorize("hasAuthority('sys:user:add')")
public R insert(@RequestBody UserDTO userDto) {
return R.ok(userService.insertUser(userDto));
}
```
如果用户没有这个权限的话,访问该资源会返回403状态码。
## 如何权限分配
那么,如何才能让用户拥有“user:add”权限?
后端权限模块采用RBAC(**R**ole-**B**ased**A**ccess**C**ontrol,基于角色的访问控制)的架构,简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。系统中的数据表也是基于该模型设计的。
比如,想要让admin这个用户拥有“user:add”权限,数据表就要存在如下关联数据:
1. sys_menu表中存在一个`name`为“新增用户”按钮,`perms`的值为`user:add`,假设这条数据的`menu_id`为1;
2. sys_role表中存在一个角色,该角色的`role_id`为2;
3. sys_role_menu表中存在一条数据,用于关联`menu_id`为1按钮和`role_id`为2的角色;
4. sys_user表中存在一条`user_name`为admin的用户,`user_id`为3;
5. sys_user_role表中存在一条数据,用于关联`user_id`为3的用户和`role_id`为2的角色。
通过上面的步骤,用户admin就拥有了"user:add"权限
## 有了权限如何访问?
访问后端接口需在请求头中携带token进行访问,请求头格式如下:
```
# JWT参数
# token头部
jwt:
header: Authorization
tokenHead: 'Bearer '
# Authorization: Bearer 登录时返回的token
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTU1ODk2NzY0OSwiaWF0IjoxNTU4OTQ2MDQ5fQ.jsJvqHa1tKbJazG0p9kq5J2tT7zAk5B6N_CspdOAQLWgEICStkMmvLE-qapFTtWnnDUPAjqmsmtPFSWYaH5LtA
```
在请求URL头部加上`Authorization`即可
- 快速了解
- 1. 项目简介
- 2. 系统核心业务架构
- 3. 系统技术架构
- 使用教程
- 导入项目
- 1. 环境准备
- 2. 后端项目
- 3. 前端项目
- 开发文档
- 后端开发文档
- 1. 项目目录结构
- 2. 如何二次开发
- 3. 数据权限实现
- 4. 如何控制权限
- 5. 操作日志介绍
- 6. 如何获取当前登录用户信息
- 前端开发文档
- 1. 项目目录结构
- 2. 如何二次开发
- 更新日志
- 第三方登录说明
- 搭建教程
- 第一章.基础框架搭建
- 1.1.整体架构预览
- 1.2.基础架构搭建
- 1.3.配置文件
- 第二章.架构完善
- 2.1.搭建upms模块
- 2.2.参数统一化
- 2.3.异常处理
- 第三章.完善登录流程
- 3.1.表结构设计
- 3.2.引入安全框架
- 3.3.引入JWT
- 3.4.完善登录
- 3.5.演示登录
- 3.6.整合图形验证码
- 7.7.完善验证码登录
- 第四章. 前端系统搭建
- 4.1.前端基础架构搭建
- 4.2.封装Axios