利用swagger做按钮级权限控制

1.首先使用swagger的/v2/api-docs?group=web这个接口获取我们开发的所有接口json列表集合,如图:

1.这个集合用来为创建各个权限(最细的权限),其中某个可以是一个按钮的权限,或者多个是一个按钮下的权限

2.使用普通的用户-角色-权限表关系建表(一个用户可以有多个角色,一个角色可以有多个权限)

3.权限表中权限标识就存上边swagger接口中返回列表中的接口链接 例如:/AppUser/attendanceinfo就是一个权限标识符号

4.在项目启动时将角色和权限的对应关系保存到内存或Redis缓存中,如有角色权限的操作则刷新内存中的这组数据,人物登录时内存记录用户token跟角色的关系,token失效时同事清理这组数据,这样用户一旦登陆成功内存中就维护了一组登录人->角色->权限的关系,不必每次都关联查表了

5.因为项目使用vue做的前后端分离,所以每次用户登录成功都会返回当时用户所拥有的所有权限(可能在用户登录期间他失去了某个权限,但是他点击相关按钮时后台还是会提示他没有此权限的,临时多了某权限则需要重新登录才能看到)

6.前端控制按钮显隐的方式就是为为按钮增加新的属性permissions 它的值就是跟按钮访问的后台接口链接相关的值 例如:

<div class=“permissions”  permissions="and:aaa/bbb,ccc/ddd">查询</div>含义:只用同时拥有aaa/bbb和ccc/ddd时按钮才会显示,场景基本没有,多数and后的值都是一个链接

<div  class=“permissions”  permissions="or:aaa/bbb,ccc/ddd">详情</div>含义:拥有aaa/bbb或ccc/ddd中的一个就能拥有此按钮权限,场景可能会有,比如点击这个详情按钮后的页面中有两个操作按钮,对应的权限分别是aaa/bbb和ccc/ddd,只要拥有一个此人就应该能进来操作对应权限

在每次页面加载完毕时获取所有class为permissions的div,通过登录后获取的权限集合对比进行相关的显隐操作(如果怕页面因为隐藏导致显示错乱也可以是置灰操作),这样前后台的权限控制就统一起来了

猜你喜欢

转载自blog.csdn.net/qq_16320025/article/details/90062753