MENU

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

June 23, 2020 • Read: 2681 • 技术杂谈

最近在使用后台框架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;推荐还是第二种,方便做细致的权限控制。