概述
權限管理功能是項目中重要的部分,通過權限系統可以控制系統中各用戶所擁有的權限,比如能否打開一個頁面,能否進行某項操作,合理的權限控制可以規避誤操作的風險,提高系統的可用性。
權限管理的思路一般爲基於角色和基於資源兩種,基於角色即對爲用戶賦予某些角色的權限,基於資源則爲對用戶賦予某些資源的權限。兩種既可以單獨實現,也可結合起來使用。
設計思路
系統中抽象出操作、角色、用戶三個概念,其中操作由項目中抽象出來,一個操作可以是一個URI,也可以是一個方法,比如創建用戶的操作,刪除用戶的操作。角色是權限管理的核心,一個角色具有某些操作的權限,比如用戶管理員,這個角色具有的權限有添加用戶的權限、修改用戶的權限、刪除用戶的權限。系統中的用戶則被賦予若干個角色,比如如果有一個用戶A被賦予了用戶管理員的角色,那他就能添加、修改、刪除用戶。
表結構設計
使用MySQL和MongoDB都可以,MongoDB可以直接用數組保存用戶所具有的角色
項目表
字段名 | 說明 |
---|---|
id | |
token | 密鑰 |
name | 項目名稱 |
ctime | 創建時間 |
mtime | 修改時間 |
操作表,uri是唯一索引
字段名 | 說明 |
---|---|
id | |
project_id | 項目id |
uri | 操作的地址 |
name | 操作名稱 |
status | 狀態 |
ctime | 創建時間 |
mtime | 修改時間 |
角色表
字段名 | 說明 |
---|---|
id | |
project_id | 項目id |
actions | 具有權限的操作 |
status | 狀態 |
ctime | 創建時間 |
mtime | 修改時間 |
用戶表
角色表
字段名 | 說明 |
---|---|
id | |
project_id | 項目 |
name | 用戶名 |
roles | 所屬的角色 |
status | 狀態 |
ctime | 創建時間 |
mtime | 修改時間 |