概述
权限管理功能是项目中重要的部分,通过权限系统可以控制系统中各用户所拥有的权限,比如能否打开一个页面,能否进行某项操作,合理的权限控制可以规避误操作的风险,提高系统的可用性。
权限管理的思路一般为基于角色和基于资源两种,基于角色即对为用户赋予某些角色的权限,基于资源则为对用户赋予某些资源的权限。两种既可以单独实现,也可结合起来使用。
设计思路
系统中抽象出操作、角色、用户三个概念,其中操作由项目中抽象出来,一个操作可以是一个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 | 修改时间 |