后端資源權限控制使用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