PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

博客列表 > laravel扩展权限校验中间键

laravel扩展权限校验中间键

平胸啊春
平胸啊春 原创
2020年02月23日 10:27:30 672浏览

laravel扩展权限校验中间键

1.在Middleware文件夹中创建权限校验中间键也可以用命令(php artisan make:middleware Rightvalidate)

2.Rightvalidate.php写入你要校验的内容

  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. /**
  9. * Handle an incoming request.
  10. *
  11. * @param \Illuminate\Http\Request $request
  12. * @param \Closure $next
  13. * @return mixed
  14. */
  15. public function handle($request, Closure $next)
  16. {
  17. // 通过$request获取当前访问的菜单id
  18. $url = $request->route()->getActionName();
  19. //分割url拿到方法名称
  20. $res = explode('@', $url);
  21. $action = $res[1]; // 方法名称
  22. //分割URL拿到控制器名称
  23. $res = explode('\\', $res[0]);
  24. $controller = $res[count($res)-1];//控制器名称
  25. // 到数据库中查询菜单id
  26. $curmenu = DB::table('xpcms_admin_menu')->where('controller',$controller)->where('action',$action)->first();
  27. //判断控制器方法是否存在
  28. if(!$curmenu){
  29. return response($this->_norights($request,'当前菜单不存在'),200);
  30. }
  31. //获得登录用户的信息
  32. $_admin = Auth::user()->toArray();
  33. // 管理员的group_id
  34. $group_id = $_admin['group_id'];
  35. // 查询管理组拥有的权限
  36. $rights = DB::table('xpcms_admin_group')->where('gid',$group_id)->first();
  37. if(!$rights){
  38. return response($this->_norights($request,'该角色不存在'),200);
  39. }
  40. // 该用户所能访问的菜单id列表
  41. $mymenus = json_decode($rights->rights,true);
  42. // 当前菜单的id在不在$mymenus里?
  43. if(!in_array($curmenu->mid,$mymenus)){
  44. return response($this->_norights($request,'权限不足'),200);
  45. }
  46. return $next($request);
  47. }
  48. private function _norights($request,$msg){
  49. // 检测访问method
  50. // 如果是浏览器地址栏请求,直接返回$msg
  51. // 如果是ajax请求,返回json
  52. if($request->ajax()){
  53. return json_encode(array('code'=>1,'msg'=>$msg));
  54. }else{
  55. return $msg;
  56. }
  57. }
  58. }

3.在Kernel.php注册你的中间键

4.启用你的中间键

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议