AdminsAuth.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Modes\SystemUser;
  4. use App\Modes\User;
  5. use Auth;
  6. use Closure;
  7. use phpDocumentor\Reflection\DocBlock\Tags\Var_;
  8. use Tymon\JWTAuth\Exceptions\JWTException;
  9. use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
  10. use Tymon\JWTAuth\Exceptions\TokenExpiredException;
  11. use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
  12. class AdminsAuth extends BaseMiddleware
  13. {
  14. public function handle($request, Closure $next)
  15. {
  16. try {
  17. $this->checkForToken($request);
  18. try {
  19. if ($this->auth->parseToken()->authenticate()) {
  20. // 设置管理的用户
  21. self::setInvite();
  22. self::createHandelLogs($request);
  23. return $next($request);
  24. }
  25. return showJson(102, '认证失败backend');
  26. } catch (TokenExpiredException $exception) {
  27. try {
  28. Auth::guard(config('permission.guard'))->onceUsingId($this->auth->manager()->getPayloadFactory()->buildClaimsCollection()->toPlainArray()['sub']);
  29. } catch (JWTException $exception) {
  30. // 验证失败
  31. return showJson(102, 1003);
  32. }
  33. }
  34. // 过期
  35. return showJson(103, 1005);
  36. } catch (\Exception $exception) {
  37. // 访问令牌为空
  38. return showJson(102, $exception->getMessage());
  39. }
  40. }
  41. /**
  42. * 根据用户的类型设置该用户的管理列表
  43. * @author lyh
  44. * @date 2019/4/1
  45. * @description
  46. */
  47. private static function setInvite()
  48. {
  49. $user = Auth::user();
  50. // 代理商管理员可以管理的用户列表
  51. if ($user->is_super == 3) {
  52. if ($user->district) {
  53. $ids = User::whereDistrict($user->district)->where('level', '<', $user->level)->whereIn('is_super', [0, 3])->pluck('id');
  54. } else if ($user->city) {
  55. $ids = User::whereCity($user->city)->where('level', '<', $user->level)->whereIn('is_super', [0, 3])->pluck('id');
  56. } else if ($user->province) {
  57. $ids = User::whereProvince($user->province)->where('level', '<', $user->level)->whereIn('is_super', [0, 3])->pluck('id');
  58. }
  59. // 保存当前用户可以管理的管理员列表
  60. $admins = User::whereInvitor(Auth::id())->whereIsSuper(3)->pluck('id');
  61. \Cache::put('ids', $ids, 300);
  62. \Cache::put('admins', $admins, 300);
  63. }
  64. }
  65. /*
  66. * 生成操作日志
  67. * wsl 20190806
  68. * */
  69. private static function createHandelLogs($request){
  70. $user = Auth::user();
  71. $user_id=$user->id;
  72. $not_arr=[
  73. 'admins/home/statistics',
  74. 'admins/home/withdraw',
  75. 'admins/home/upgrade',
  76. ];
  77. $name=\DB::table('system_permissions')->where('name','=',$request->path())->orWhere('name','=',\Route::currentRouteName())->value('remark');
  78. $name=empty($name)?'':$name;
  79. if('GET' != $request->method() && !in_array($request->path(),$not_arr)){
  80. $data=[
  81. 'operator'=>$user_id,
  82. 'path'=>$request->path(),
  83. 'ip'=>$request->ip(),
  84. 'path_remark'=>$name
  85. ];
  86. \DB::table('system_operation_log')->insert($data);
  87. }
  88. }
  89. }