Blogger Information
Blog 53
fans 3
comment 0
visits 55542
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
20200208-使用权限验证中间件遇到的问题-PHP线上九期***
邯郸易住宋至刚
Original
867 people have browsed it

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

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

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);

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments