免死金牌
我只是一个小白,今天刚好了解到了RBAC这个权限模型,有一点自己的看法,但不知道为什么不这样使用,在网络上求助,求各路大佬指点,各路大佬别喷我。截图来自B站的三更老师
RBAC权限模型
RBAC权限模型(Role-Based Access Control)即:基于角色的权限控制。这是目前最常被开发者使用也是相对易用、通用权限模型。(5张表)
从用户表(user)说起,一个用户可以有多种权限,同样一种权限可以分配给多个用户,所以用户表和权限表间是多对多的关系,所以就有了中间表——角色表(role)
再说角色表(role),角色表是用户表和权限表的中间表。
- 首先说明角色表与用户表之间的关系,为了方便管理,给用户分配角色,某个角色有某些权限,相当于一个权限组,所以一个用户可以有多个角色,一个角色也可以分配给多个用户,所以这两个表间同样是多对多关系,这两个表通过中间表——用户角色关联表(user_role)进行连接
- 用户角色关联表存放user_id和role_id,表示user_id这个用户有role_id代表的角色
- 然后说名角色表与权限表间的关系,显而易见的这两个表间同样是多对多的关系,所以就有了他们的中间表——角色权限关联表(role_menu)
- 角色权限关联表存放role_id和menu_id,表示role_id代表的角色具有menu_id代表的权限
虽然结构很清晰,但我有一点不太明白???
我的问题
既然用户表和权限表间是多对多关系,为什么中间表不是 用户—权限表(user_menu),直接存用户的user_id和权限的meun_id,表示这个用户具有menu_id代表的权限???
我觉得这种方案是可行的,如果要添加一个新用户就会需要给他分配权限,需要维护user和user_menu这两张表,缺点就是需要维护的数据量比较大。
再看5张表的方式,如果有合适的角色,直接给此用户赋予角色,只需要维护user和user_role这两张表即可,且数据量较小,这种情况确实比3张表的情况要方便。但如果没有合适的角色,则需要维护角色表(添加新角色)、角色权限关联表(给新角色添权限)、用户角色关联表(给用户分配角色)、用户表(添加新用户),这种情况看起来就比3张表的方案要复杂一些了,维护的数据量相同但关联关系比较复杂,而且需要维护多个表。
是现在具体的业务需求筛选出这种方案的吗?一部分人具有相同的权限,角色是相对固定的?我觉得这种方式不是很灵活,如果有特殊的权限就需要新建特殊的角色,需要的维护成本也比较高
最后
希望各路大佬可以指点一下