CheckAdminsRole.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Auth;
  4. use Closure;
  5. use App\Models\MenusAd;
  6. use App\Models\AdminsRole;
  7. class CheckAdminsRole
  8. {
  9. /**
  10. * Handle an incoming request.
  11. *
  12. * @param \Illuminate\Http\Request $request
  13. * @param \Closure $next
  14. * @return mixed
  15. */
  16. public function handle($request, Closure $next)
  17. {
  18. $rid = Auth::guard('admin')->user()->rid;
  19. $menus_id = AdminsRole::find($rid)->menus_id;
  20. $req_href = '/'.$request->path();
  21. $req_menu = MenusAd::where('href', $req_href)
  22. ->first();
  23. // 超级管理员
  24. if (!$menus_id[0]) {
  25. if ($req_menu && !$req_menu->ename) {
  26. // 访问一级菜单
  27. $resp_menu = MenusAd::where('sort1', $req_menu->sort1)
  28. ->whereNotNull('ename')
  29. ->whereNotNull('href')
  30. ->orderBy('sort2')
  31. ->orderBy('sort3')
  32. ->first();
  33. return redirect($resp_menu->href);
  34. }
  35. else {
  36. // 访问非一级菜单页面
  37. return $next($request);
  38. }
  39. }
  40. else {
  41. if ($req_menu && !$req_menu->ename) {
  42. // 访问一级菜单
  43. $resp_menu = MenusAd::where('href', 'like', $req_menu->href.'%')
  44. ->whereIn('id', $menus_id)
  45. ->orderBy('sort2')
  46. ->orderBy('sort3')
  47. ->first();
  48. if ($resp_menu) {
  49. return redirect($resp_menu->href);
  50. }
  51. else {
  52. return redirect()->back()->with('error', '无权访问');
  53. }
  54. }
  55. else {
  56. if ($req_menu) {
  57. // 访问三级菜单
  58. $if_in = in_array($req_menu->id, $menus_id);
  59. }
  60. else {
  61. // 访问非菜单页面
  62. $href_arr = explode('/', $request->path());
  63. $find_href = '/'.$href_arr[0].'/'.$href_arr[1].'/'.$href_arr[2];
  64. $if_in = MenusAd::where('href', 'like', $find_href.'%')
  65. ->whereIn('id', $menus_id)
  66. ->count();
  67. }
  68. if ($if_in) {
  69. return $next($request);
  70. }
  71. else {
  72. return redirect()->back()->with('error', '无权访问');
  73. }
  74. }
  75. }
  76. }
  77. }