通用权限sql设计

基础版

概念:

权限控制一般分为两种

1. 菜单可见权限

    控制哪些菜单、按钮可见,不可见。

2. 数据可见权限

    控制哪些数据可见,不可见。

今天只说《菜单可见权限》

那么想要控制菜单可见的权限,最简单的,需要3个表:

用户表-角色表-菜单表

为什么中间要加个角色呢?自己想。

思考:多个用户对应多种角色,多种角色对应多个菜单

他们都属于多对多关系,于是需要中间表,他们变成了这样

用户表-用户角色表-角色表-角色菜单表-菜单表

上图

上详情图

进阶版

1. 添加《用户菜单关联表》

这种属于特殊情况,用于一些特殊用户。假设用户是管理员,直接通过这个表关联。更加方便快捷。

2. 菜单表优化

菜单一般分为3个等级:模块、菜单、按钮

通常通过parentId(父级ID)来表示关系。

还是上图吧

3. 拆分按钮,当按钮过多时,将按钮从菜单表中拆分出来,形成按钮表。

菜单与按钮一般都是一个菜单对应多个按钮,于是只要在按钮表中保留一个菜单ID即可,至于为什么不在菜单表中保留按钮ID,自己去想。

4. 权限表进阶

为了简单一些,在这之后省略中间关联表的描述,但是它还是在的,心里记得就行。

表现形式一:

用户-角色-菜单-权限表

用户-角色-按钮-权限表

模块-菜单-按钮(拆分表)

这里添加了一个加权限表的,目的是为了把权限表缓存起来。查询权限时,只需要在缓存中查询,而不用去数据库。

但是在每次授权之后,需要清除一下缓存。

总结:

无论如何变化、进阶,本质还是最基础:

用户-角色-菜单

这样一个思想。

原文地址:https://www.cnblogs.com/BingLiVIP/p/13414083.html