checkToken.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\admin\middleware;
  4. use think\facade\Db;
  5. class checkToken
  6. {
  7. private $post;
  8. private $uid=0;
  9. private $uname='';
  10. private $roleid='0';
  11. private $level='0';
  12. public $novalidate=[
  13. 'admin/systemlast',
  14. "admin/login",
  15. "admin/stats",
  16. "admin/departstat",
  17. "admin/departEveryDay",
  18. "admin/departEveryMonth",
  19. "admin/companyEveryMonth",
  20. "admin/dzqrd",
  21. "admin/companyEvery",
  22. "admin/wechat_getinfo",
  23. "admin/wechat_getconfig",
  24. "admin/totalstat"
  25. ];
  26. /**
  27. * 处理请求
  28. *
  29. * @param \think\Request $request
  30. * @param \Closure $next
  31. * @return
  32. */
  33. public function handle($request, \Closure $next)
  34. {
  35. if ($request->isOptions()) {
  36. return json();
  37. }
  38. $data=[
  39. "info"=>"",
  40. "action"=>"",
  41. "url"=>$request->server()['REQUEST_URI'],
  42. "param"=>json_encode($request->param(),JSON_UNESCAPED_UNICODE),
  43. "name"=>'',
  44. "addtime"=>date("Y-m-d H:i:s")
  45. ];
  46. Db::name("system_log")->insert($data);
  47. if(!in_array($request->pathinfo(),$this->novalidate)){
  48. $result = $this->validateToken($request->param());
  49. if($result['code']!=0){
  50. return error_show($result['code'],$result['message']);
  51. }
  52. }
  53. $request->uid=$this->uid;
  54. $request->uname=$this->uname;
  55. $request->roleid=$this->roleid;
  56. $request->level=$this->level;
  57. return $next($request);
  58. }
  59. /**
  60. * @return array
  61. * @throws \think\db\exception\DataNotFoundException
  62. * @throws \think\db\exception\DbException
  63. * @throws \think\db\exception\ModelNotFoundException
  64. * @throws \think\exception\DbException
  65. */
  66. public function validateToken($request){
  67. $token = isset($request['token']) ? trim($request['token']) : "";
  68. $companyNo = isset($request['relaComNo']) ? trim($request['relaComNo']) : "";
  69. if($token==""){
  70. return ["code"=>101,"message"=>"参数token不能为空"];
  71. }
  72. $effetc = VerifyTokens($token);
  73. if(!empty($effetc) && $effetc['code']!=0) {
  74. return ["code"=>$effetc['code'],"message"=>$effetc['message']];
  75. }
  76. $this->uid=$effetc['data']['id']??"";
  77. $this->uname=$effetc['data']['nickname']??"";
  78. $where=[];
  79. if($companyNo!=""){
  80. $where=["companyNo"=>$companyNo];
  81. }
  82. $role = Db::name("user_role")->where(["uid"=>$this->uid,"is_del"=>0])->where($where)->findOrEmpty();
  83. if(empty($role)){
  84. return ["code"=>101,"message"=>"账户已禁用"];
  85. }
  86. $this->roleid=$role['roleid'];
  87. $level =Db::name("role")->where(["id"=>$role['roleid']])->find();
  88. if($role['status']==0 || $level['status']==0 ){
  89. $this->level='';
  90. }else $this->level = $effetc['data']['level'];//$this->level=$level['level']>1 ?2 :($level['level']??1);
  91. return ["code"=>0,"message"=>"验证通过"];
  92. }
  93. }