checkToken.php 2.9 KB

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