Permission.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * rbac管理
  4. *
  5. * @author fzs
  6. * @Time: 2017/07/14 15:57
  7. * @version 1.0 版本号
  8. */
  9. namespace App\Http\Middleware;
  10. use App\Utils\UrlUtils;
  11. use Closure, Log;
  12. use Illuminate\Http\JsonResponse;
  13. use App\Models\Admin;
  14. class Permission
  15. {
  16. /**
  17. * 权限处理
  18. *
  19. * @access public
  20. * @return mixed
  21. */
  22. public function handle($request, Closure $next)
  23. {
  24. $admin = new Admin();
  25. $restfulParams = UrlUtils::toRestfulParams();
  26. $url = $restfulParams[UrlUtils::URL];
  27. $controller = $restfulParams[UrlUtils::CONTROLLER];
  28. $method = $restfulParams[UrlUtils::CLASS_METHOD];
  29. $className = $restfulParams[UrlUtils::CLASS_NAME];
  30. $requestMethod = $restfulParams[UrlUtils::REAL_METHOD];
  31. $auth = '';
  32. $menu = [];
  33. $permissionName = '';
  34. $allPermissions = $admin->permissions();
  35. $permissionRules = [
  36. strtolower($controller .'@'. $method),
  37. strtolower($className .'@'. $method),
  38. strtolower($controller .'@'. $requestMethod),
  39. strtolower($className .'@'. $requestMethod),
  40. strtolower($controller),
  41. strtolower($className),
  42. ];
  43. foreach ($permissionRules as $p) {
  44. if (isset($allPermissions[$p])) {
  45. $permission = $allPermissions[$p];
  46. $auth = $permission[config('admin.permission_name')];
  47. $permissionName = $permission[config('admin.permission_display_name')];
  48. break;
  49. }
  50. }
  51. $allMenus = $admin->allMenus();
  52. $urlMatchMaxLen = 0;
  53. foreach ($allMenus as $m) {
  54. $params = explode(":", $m['routes']);
  55. if (empty($params[0]) || empty($params[1])) continue;
  56. if (($params[0] == 'url' && starts_with($url, $params[1]))) {
  57. $len = strlen($params[1]);
  58. if ($len > $urlMatchMaxLen) {
  59. $menu = $m;
  60. }
  61. } else if($params[0] == 'controller' && in_array(strtolower($params[1]), $permissionRules) ) {
  62. $menu = $m;
  63. break;
  64. }
  65. }
  66. if (!empty($menu)) {
  67. $pmid = isset($menu[config('admin.menu_table_parent_id_key')]) ? $menu[config('admin.menu_table_parent_id_key')] : 0;
  68. $mid = isset($menu[config('admin.menu_table_id_key')]) ? $menu[config('admin.menu_table_id_key')] : 0;
  69. $admin->setMenuId($pmid, $mid);
  70. }
  71. if ($admin->hasRole(config('admin.role_admin'))) {
  72. return $next($request);
  73. }
  74. if (!empty($auth)) {
  75. if (!$admin->can($auth)) {
  76. if ($request->ajax()) {
  77. return new JsonResponse(['msg'=>trans('fzs.common.no_permission'),'status'=>0], 200);
  78. } else {
  79. exit(trans('fzs.common.no_permission'));
  80. }
  81. }
  82. }
  83. return $next($request);
  84. }
  85. }