利用swagger做按钮级权限控制

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

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

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

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

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

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

6.前端控制按钮显隐的方式就是为按钮增加新的属性permissions它的值就是跟按钮访问的后台接口链接相关的值,因为前端在页面开发时哪个按钮调哪个连接是知道的,所以这个属性在开发时就在页面写死的, 例如:

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

<div  class=“havePermissions”  permissions="or:aaa/bbb,ccc/ddd">详情</div>含义:拥有aaa/bbb或ccc/ddd中的一个权限就能拥有此按钮权限,场景可能会有,比如点击这个详情按钮后的页面中有两个操作按钮,对应的权限分别是aaa/bbb、ccc/ddd,只要拥有一个此人就应该能进来操作对应权限;还有一种场景:左侧子菜单的隐现,子菜单页面中的按钮级别权限的or集合;

在每次页面加载完毕时调用一个一封装好的js方法:获取所有class=havePermissions的div,然后分析每个div的permissions属性,再去对比登录后获取的权限集合,控制div的hidden属性的有无(如果怕页面因为隐藏导致显示错乱也可以是置灰操作),这样前后台的权限控制就统一起来了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值