CheckButtonPermission.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Models\RoleUser;
  4. use Closure;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\DB;
  7. use App\Services\RoleUserService;
  8. use App\Services\RoleService;
  9. use App\Services\MenuService;
  10. class CheckButtonPermission
  11. {
  12. public function handle(Request $request, Closure $next)
  13. {
  14. $user = $request->user;
  15. $userId = $user->id;
  16. if($userId == 1){
  17. return $next($request);
  18. }
  19. $roleUserList = RoleUserService::findAll(['user_id' => $userId]);
  20. $roleIds = collect($roleUserList)->pluck('role_id')->toArray();
  21. if(empty($roleIds)){
  22. $roleIds = [-1];
  23. }
  24. // 当前访问的路由
  25. $currentUri = ltrim($request->route()->uri(), '/');
  26. $menuInfo = MenuService::findOne(['uri' => $currentUri, 'type' => MenuService::model()::TYPE_BUTTON ,'status' => MenuService::model()::STATUS_SHOW]);
  27. if(empty($menuInfo)){
  28. return $next($request);
  29. }
  30. $roles = RoleService::model()::with(['menus'=> function ($query) {
  31. $query->where('type', MenuService::model()::TYPE_BUTTON);
  32. }])->whereIn('id',$roleIds)->get();
  33. $allMenusUris = [];
  34. foreach ($roles as $role) {
  35. if (!empty($role['menus_uris'])) {
  36. $allMenusUris = array_merge($allMenusUris, $role['menus_uris']);
  37. }
  38. }
  39. if(in_array($currentUri,$allMenusUris)){
  40. return $next($request);
  41. }else{
  42. return response()->json([
  43. 'code' => -1,
  44. 'timestamp' => time(),
  45. 'msg' => '无权限访问',
  46. 'data' => []
  47. ]);
  48. }
  49. }
  50. }