后台管理系统,权限管理怎么做?| RBAC | 面试问答 | EP.02

188 阅读2分钟

首先整体是基于RBAC设计的,也就是基于角色的权限控制(Role-Based Access Control)。

用户和权限没有直接关系,通过角色来联系,给用户分配角色,给角色分配权限,这样用户间接获得权限。

具体实现上分2大块,一块是页面上的,需要用户手动操作数据,另一块就是不需要用户操作,具体代码实现权限控制。

先说页面上的,就是给角色,用户,和权限,分别做一个页面,手动操作实现增删改查,比如说新增一个用户,删除一个用户之类的。

另一块就是代码上的,这个分成2块,一个是菜单权限控制,另一个是按钮权限控制。

菜单权限就是要不同的用户进来,显示的菜单不一样。

菜单又是根据路由遍历来的,所以就变成控制路由,也就是不同的用户,注册的路由不一样,那路由就不能写死,需要动态注册路由。

怎么动态注册呢?

那我们把路由进行分类,一类是静态路由,也就是不受权限控制的,所有用户默认就有的,比如说登录页。

第二类就是动态路由,受权限控制的页面。

第三类就是任意路由,404页面。

首先用户登录之后,默认就是有静态路由,然后获取用户信息,根据用户信息里的权限数据来匹配动态路由,把动态路由通过addRoutes这个方法注册到路由器。

最后再追加任意路由,因为路由匹配看顺序,所以任意路由得放到最后注册,不然先匹配404就匹配不到其他的路由了。

这样动态注册路由之后,就可以根据路由去生成菜单,也就实现了菜单权限。

接下来就是按钮权限,这个可以用自定义指令来做。

给按钮设置指令的值,判断用户获取的权限数据里有这个按钮的指令值,那就显示按钮,没有就删除这个节点,页面就不会显示这个按钮,这样就实现了对按钮的权限控制。

总结一下,整体权限控制是根据RBAC设计的。

权限数据的页面就是常规的增删改查,具体权限控制的话,第一个菜单权限主要是动态注册路由实现的,第二个按钮权限就是通过自定义指令来实现的。