123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
-
- namespace app;
-
- class BaseController
- {
-
- /**
- * 无需签名
- * @var array
- */
- protected $noSize = [];
-
- /**
- * 用户信息
- * @var array
- */
- protected $userInfo = [];
-
- /**
- * 无需登录的方法,同时也就不需要鉴权了
- * @var array
- */
- protected $noNeedLogin = [];
-
- /**
- * 无需安全验证
- * @var array
- */
- protected $noSecure = [];
-
- protected $param = [];
-
- //是否需要登录
- private static function checklogin($arr, $action)
- {
- $arr = is_array($arr) ? $arr : explode(',', $arr);
- if (!$arr) {
- return false;
- }
- $arr = array_map('strtolower', $arr);
- // 是否存在
- if (in_array(strtolower($action), $arr) || in_array('*', $arr)) {
- return true;
- }
- // 没找到匹配
- return false;
- }
-
- private static function getParam($method, $request)
- {
- $arr = [];
- switch ($method) {
- case 'post':
- $arr = $request->post();
- break;
- case 'get':
- $arr = $request->get();
- break;
- case 'delete':
- $arr = $request->get();
- break;
- case 'put':
- parse_str($request->rawBody(), $arr);
- break;
- case 'patch':
- parse_str($request->rawBody(), $arr);
- break;
- }
- return $arr;
- }
-
- // 初始化
- public function initialize($request)
- {
- try {
- $function = $request->action;
- $controller = $request->controller;
- $directory = new $controller();
- if (!self::checklogin($directory->noNeedLogin, $function)) {//true为不用验证
- if (method_exists($directory, $function)) {
- $token = $request->header();//获取请求头token
- if (!isset($token['token'])) {
- return tojson(10000, 'token不存在');
- } else {
- $this->userInfo = getToken($token['token']);
- if (!is_array($this->userInfo)) {
- return $this->userInfo;
- }
- }
- }
- }
- $method = $request->method();
- $method = strtolower($method);
- $param = self::getParam($method, $request);
- $module = $request->app;
- $controller2 = substr($controller, strpos($controller, 'controller') + 11);
- $validate_classname = "\app\\$module\\validate\\$controller2";
- if (class_exists($validate_classname)) {
- $validate = new $validate_classname;
- if ($validate->hasScene($function)) {//验证场景
- if (!$validate->scene($function)->check($param)) {//验证器
- return tojson('10000', $validate->getError());
- }
- }
- }
-
- //安全验证
- $nosecure = nosecure($method, $directory->noSecure, $function, $param);
- if (!is_array($nosecure)) {
- return $nosecure;
- }
-
- //验签
- $param2 = $param;
- $verifysign = verifysign($param2, $directory->noSize, $request);//加上验签
- if ($verifysign) {
- if (!is_array($verifysign)) {
- return $verifysign;
- }
- }
-
- if (isset($param['page']) && !empty($param['page'])) {
- $param['page'] = $param['page'] - 1;
- if (!isset($param['pageSize'])) {
- $page = 0;
- $pageSize = 0;
- } else {
- $page = $param['pageSize'] * $param['page'];
- $pageSize = $param['pageSize'];
- }
- } else {
- $page = 0;
- $pageSize = 0;
- }
- $request->page = $page;
- $request->pageSize = $pageSize;
- $request->param = $param;
- $request->userInfo = $this->userInfo;
- } catch (\Exception $e) {
- return tojson(10000, $e->getMessage());
- } catch (\Throwable $e) {
- return tojson(10000, $e->getMessage());
- }
- }
-
- }
|