Guns二次开发(十一):商品分类管理之【控】字诀

关于博客中使用的Guns版本问题请先阅读   Guns二次开发目录

 

       到此篇博客为止,前面的一系列博客中,我们实现了商品分类管理模块的增删改查,演示了如何在Guns源码的基础上来开发我们自己的业务模块。当然了,这还远没有结束,我们还需要将Guns原有的权限控制功能应用到我们写的一系列后端接口中。Guns的权限系统对模块的权限控制分为前后端两部分,前端控制按钮(比如【添加】、【修改】和【删除】等按钮)是否显示出来,后端代码则是通过加一个注解来控制当前角色是否有权限访问这个接口,假设用户当前的角色没有权限访问某个接口,却又访问了这个接口时,在有权限控制的时候,就会控制这种越权行为。

 

1、给资源加上控制权限

(1)找到前端控制权限的代码

 

category.html 页面中,下图的红框中的代码则是对这些按钮做了权限判断的,只有当前用户拥有访问这些接口的权限,才会展示这些按钮:

 

 (2)设置当前用户没有权限访问【启用/停用】接口

为了方便本篇博客的介绍,我们不妨先设置当前角色(我当前登录的是管理员角色) 没有访问【启用/停用】按钮的权限。设置方法如下:

 

修改之后,退出当前账号后再重新登录:

 

然后再访问分类管理页面,发现【启用/停用】按钮没有显示了:

 

 

(3)前端代码制造一个bug——不做权限控制

 因为guns 自带的权限控制系统,不仅是在前端需要做控制,后端接口也需要做控制,为了方便介绍,此处我们不妨在前端制造一个bug,在前端不做控制的情况下,由后端来做限制,看看是否能够起到保护资源的的目的。

前端页面中,对【启用/停用】按钮不做权限控制:

 

 

(4)后端接口加上权限控制

因为此时我的后端接口是没有做权限控制的,所以如果此时点击【启用/停用】按钮,请求是依旧能够发送成功的。所以接下来我们要在后端接口加上权限控制,方法很简单,只需要加上一个@Permission注解,这个注解所在的包是 cn.stylefeng.guns.core.common.annotion.Permission 。

 

(5)测试后端权限控制是否生效

 

这是效果,可以发现后端权限校验生效了:

 

权限注解的核心代码在这个类中,内部逻辑很简单,有需要的可以自己去读源码或者debug查看流程

 

2、完善Guns自带的权限系统

有这么一个场景:后台管理系统用户张三拥有【超级客服】的角色,而【超级客服】拥有操作资源A和资源B的权限,某天张三把超级管理员李四给得罪了,李四很不爽,于是把张三降为【普通客服】,而普通客服只拥有操作资源B的权限。可是这时候问题来了,李四在把张三降为【普通客服】的前一秒,张三还处于账号登录状态并且还拥有【超级客服】的权限,当李四成功把张三降级后,查看登录日志,发现张三还能操作资源A。李四没有办法,总不能拉下脸让张三自己退出后再重新登录,无奈之下只能重启服务器。但是这个操作无疑得罪的就不只是张三一人了。

 这其实也正是当前版本的Guns的权限系统的一个问题,更确切的说,这是Shiro权限框架的一个硬伤——无法动态更新用户权限。我们不妨来查看Guns的源码来更直观的发现问题。

(1)找到@Permission注解的实现类

看过guns相关视频的人都知道@Permission的实现原理(视频链接在文章开头的guns目录中有),PermissionAop.java文件中则是对@Permission权限注解的具体实现。

经过debug,可以发现checkAll()函数才是权限校验的核心逻辑:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值