Featured image of post Fastadmin 你没有权限访问(解决)

Fastadmin 你没有权限访问(解决)

最近在使用后台框架Fastadmin进行开发,框架本身依托于TP5,第一次上手还是挺好用的,框架自身集成了一些常见的前端组件,对我这种前端很菜的人来讲非常友好。

今天在开发中遇到了一个常见的问题,管理员操作正常,但是普通管理操作却提示“你没有权限访问” 微信截图_20200623125545.png

具体分析:

  • 操作方法名getIp,所属控制器PonStaticBroadband
  • 首先确认这个请求是个ajax请求,并非常规的一些操作,所以并没有在菜单规则中添加控制权限。
  • 其次这个请求在设计中考虑的时候,仅需要已经登录即可,所以在控制器中对属性$noNeedRight进行了添加。 微信截图_20200623130444.png

按道理来讲,这个时候任何正常登录之后的任何请求应该是正常,但实际上却并非如此;回到方法getIp内,其实里面有个地方是这样写的 $data = (new Search())->getIps($first, $num, $code); 也就是说实际上这个函数体内调用了其它控制器方法,但是来到Search控制器里面,我对方法getIps,同样进行了权限授权,但是依旧提示权限不正常就很尴尬了… 微信截图_20200623131141.png

然后就各种查了…,最后来到后端都要继承的一个类Backend,看到初始方法_initialize里面,有个权限验证: 微信截图_20200623131513.png 微信截图_20200623131611.png

最后在来到了Auth控制器,math方法里面160行这句,原因也就在这里;他通过对比路由请求的‘动作’action,和需要操作的方法看是否授权,可能有点迷…

简单讲:我的请求路由是PonStaticBroadband中的一个方法,但这个方法里面又调用了Search里面的一个方法,于是在Search里面需要做权限判断,发现我的路由请求动作action在Search是没有授权的,于是就丢出来一个没有权限访问…

解决办法:

修改一下 Search控制器属性$noNeedRight,暴力的直接改成protected $noNeedRight =['*']可以解决,也可以在原有基础上增加一个 getIp;推荐还是第二种,方便做细致的权限控制。

本文采用 CC BY 4.0 协议,转载请署名并注明出处。
最后更新于 2020-06-24 09:02:34
使用 Hugo 构建
主题 StackJimmy 设计