博主信息
邯郸易住宋至刚
博文
53
粉丝
3
评论
0
访问量
25598
积分:0
P豆:127.5

20200208-使用权限验证中间件遇到的问题-PHP线上九期***

2020年02月08日 18:23:52阅读数:417博客 / 邯郸易住宋至刚/ 遇到的问题及解决方法

使用权限验证中间件遇到的问题

一、使用框架提供的数据库查询方法与自定义数据库查询方法的区别

1、如果使用框架提供的查询方法first(),那么权限列表$rights = $group->rights;

2、如果使用自定义查询方法item(),那么权限列表$rights = $group[‘rights’];

  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Support\Facades\Auth;
  5. use Illuminate\Support\Facades\DB;
  6. class RightValidate
  7. {
  8. public function handle($request, Closure $next)
  9. {
  10. //通过$request获取当前访问的菜单的id
  11. $route = $request->route()->getActionName();
  12. $res = explode('@',$route);
  13. $action = $res[1];
  14. $result = explode('\\',$res[0]);
  15. $controller = $result[count($result)-1];
  16. $curmenu = DB::table('xpcms_admin_menu')->where(['controller'=>$controller,'action'=>$action])->item();
  17. if (!$curmenu){
  18. return response('<script>alert("当前菜单不存在")</script>',200);
  19. }
  20. $_admin = $request->session()->get('admin');
  21. $group_id = $_admin['group_id'];
  22. //此处若使用自
  23. $group = DB::table('xpcms_admin_group')->where('gid',$group_id)->first();
  24. if (!$group){
  25. return response('<script>alert("该角色不存在");window.location.href="javascript:history.go(-1)";</script>',200);
  26. }
  27. $rights = $group->rights;
  28. $rights = json_decode($rights);
  29. //echo '<pre>';
  30. //print_r($group);
  31. print_r($curmenu['mid']);
  32. var_dump($rights);
  33. if (!$rights){
  34. return response('<script>alert("您所在的权限组无权限");window.location.href="javascript:history.go(-1)";</script>',200);
  35. }
  36. if (!in_array($curmenu['mid'],$rights)){
  37. return response('<script>alert("请确认您是否有此权限");window.location.href="javascript:history.go(-1)";</script>',200);
  38. }
  39. return $next($request);
  40. }
  41. }

二、遇到了一个小坑,多了一个逗号

在手动添加菜单id时,不小心多了一个逗号,所以在使用json_decode()时,值为Null,所以那个组就等于是没有任何权限,找坑的时候也是费了很多精力。

三、响应弹窗的问题

1、如果使用return response(‘相关信息’,200)

这样在页面上显示一个响应信息,显得很不协调。
尝试使用return response(‘<script>alert(“您所在的权限组无权限”);</script>‘,200);
这样会有一个弹窗出现,感觉舒服些;

2、弹窗出现后,点击确定,是一个空白页面

这个空白页面怎么解决呢,不管请求的是什么权限,在请求这个权限之前的那个页面,一定是它拥有的权限,所以,点击确定后,返回前一个页面,是较为合理的操作;具体实现如下:
return response(‘<script>alert(“您所在的权限组无权限”);window.location.href=”javascript:history.go(-1)”;</script>‘,200);

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论