通用权限sql设计
基础版
概念:
权限控制一般分为两种
1. 菜单可见权限
控制哪些菜单、按钮可见,不可见。
2. 数据可见权限
控制哪些数据可见,不可见。
今天只说《菜单可见权限》
那么想要控制菜单可见的权限,最简单的,需要3个表:
用户表-角色表-菜单表
思考:多个用户对应多种角色,多种角色对应多个菜单
他们都属于多对多关系,于是需要中间表,他们变成了这样
用户表-用户角色表-角色表-角色菜单表-菜单表
上图
上详情图
进阶版
1. 添加《用户菜单关联表》
这种属于特殊情况,用于一些特殊用户。假设用户是管理员,直接通过这个表关联。更加方便快捷。
2. 菜单表优化
菜单一般分为3个等级:模块、菜单、按钮
通常通过parentId(父级ID)来表示关系。
还是上图吧
3. 拆分按钮,当按钮过多时,将按钮从菜单表中拆分出来,形成按钮表。
菜单与按钮一般都是一个菜单对应多个按钮,于是只要在按钮表中保留一个菜单ID即可。
4. 权限表进阶
为了简单一些,在这之后省略中间关联表的描述,但是它还是在的,心里记得就行。
表现形式一:
用户-角色-菜单-权限表
用户-角色-按钮-权限表
模块-菜单-按钮(拆分表)
这里添加了一个加权限表的,目的是为了把权限表缓存起来。查询权限时,只需要在缓存中查询,而不用去数据库。
但是在每次授权之后,需要清除一下缓存。
总结:
无论如何变化、进阶,本质还是最基础:
用户-角色-菜单
这样一个思想。