根据RBAC 模型的定义,我在数据库中建了有下面五个表:
用户表,用户-角色关联表,角色表,角色-权限关联表,权限表
现在我已经写好了对应的拦截器,并且在拦截器中通过token获取到用户,再通过这几张表获取到当前用户所拥有的权限列表了,
但是这个权限列表是怎么用的?
就比如 : 我知道前端项目需要做动态路由的时候会需要后端帮忙存储一个 路由表,一个 角色-路由关联表 ,是不涉及到权限表的,或者说这个路由表就是权限表。
那么现在,后端有100个 接口,其中各自需要对应的角色,有十个游客可以访问,二十个需要登录才能访问,三十个需要管理员才能访问,四十个需要超级管理员才能访问。那是不是也需要像路由一样在数据库存一个 接口地址的表 和一个 角色-接口地址关联表 ? 那这样的话,权限表也没有用到呀?还是有什么其他方案呢?
RBAC 5张表是最基础的5张,这里的权限表是一个统称,权限也就是拥有的资源,页面,按钮,接口,文件,等等都能称作是资源,每种资源我们都需要建立一张表存放这个资源的清单,然后往角色-权限关联表中插入数据以给角色分配这种资源的权限。
所以你说的路由表和角色-路由关联表,其实就是页面资源表,和角色-权限关联表。
我们典型的使用资源表就是两张,一个页面资源表,一个按钮资源表,外加一个辅助的按钮和页面的关系表,这样我们通过权限就管理起来了前端的页面权限和按钮权限。
至于如果你还想控制接口权限,你可以选择再增加一张接口资源表,但为了省事现在大多数系统都是把按钮权限拿来复用当做接口权限,你在前端页面没有这个按钮权限,那么按钮对应的后端接口你也没有权限,这两者绑定在一起也说得通的,不知道你理解没有。
分享一下我最近刚做的:
这个是菜单和按钮管理
这个是权限管理
权限管理就是将资源分配给角色,分配好以后,我们就可以在前端及后端读取当前用户的角色,查询角色拥有的资源,判断是否包含当前资源,前端页面资源控制可以使用动态路由,按钮资源控制可以使用vue自定义指令,后端接口资源控制可以使用Aop+自定义注解,也可以选择集成springSecurity