lihai-oa/app/api/ApiController.php

171 lines
4.3 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-3.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\api;
use think\App;
use think\exception\HttpResponseException;
use think\facade\Request;
use think\facade\Session;
use think\facade\View;
use think\facade\Db;
use think\facade\Cache;
use think\Response;
use systematic\Systematic;
/**
* 控制器基础类
*/
abstract class ApiController
{
/**
* Request实例
* @var \think\Request
*/
protected $request;
/**
* 应用实例
* @var \think\App
*/
protected $app;
/**
* 是否批量验证
* @var bool
*/
protected $batchValidate = false;
/**
* 控制器中间件
* @var array
*/
protected $middleware = [];
/**
* 分页数量
* @var string
*/
protected $pageSize = '';
/**
* jwt配置
* @var string
*/
protected $jwt_conf = [
'secrect' => 'lihaioa',
'iss' => 'ceshi-oa.lihaink.cn', //签发者 可选
'aud' => 'lihaioa', //接收该JWT的一方可选
'exptime' => 7 * 86400, //过期时间,这里设置7天
];
/**
* 构造方法
* @access public
* @param App $app 应用对象
*/
public function __construct(App $app)
{
$this->app = $app;
$this->request = $this->app->request;
$this->module = strtolower(app('http')->getName());
$this->controller = strtolower($this->request->controller());
$this->action = strtolower($this->request->action());
$this->uid = 0;
$this->did = 0;
// 控制器初始化
$this->initialize();
}
// 初始化
protected function initialize()
{
//每页显示数据量
$this->pageSize = Request::param('page_size', \think\facade\Config::get('app.page_size'));
}
/**
* Api处理成功结果返回方法
* @param $message
* @param null $redirect
* @param null $extra
* @return mixed
* @throws ReturnException
*/
protected function apiSuccess($msg = 'success', $data = [])
{
return $this->apiReturn($data, 0, $msg);
}
/**
* Api处理结果失败返回方法
* @param $error_code
* @param $message
* @param null $redirect
* @param null $extra
* @return mixed
* @throws ReturnException
*/
protected function apiError($msg = 'fail', $data = [], $code = 1)
{
return $this->apiReturn($data, $code, $msg);
}
/**
* 返回封装后的API数据到客户端
* @param mixed $data 要返回的数据
* @param integer $code 返回的code
* @param mixed $msg 提示信息
* @param string $type 返回数据格式
* @param array $header 发送的Header信息
* @return Response
*/
protected function apiReturn($data, int $code = 0, $msg = '', string $type = '', array $header = []): Response
{
$result = [
'code' => $code,
'msg' => $msg,
'time' => time(),
'data' => $data,
];
$type = $type ?: 'json';
$response = Response::create($result, $type)->header($header);
throw new HttpResponseException($response);
}
/**
* 验证用户访问权限
*/
protected function checkAuth()
{
$uid = JWT_UID;
$loginAdmin = Db::name('Admin')->where(['id' => $uid])->find();
if(!$loginAdmin['status']){
$this->apiError('用户已禁止登录');
}
$baseUrl = explode('/', request()->baseUrl());
$action = $baseUrl[count($baseUrl)-1] ?? '-' ;
$controller = $baseUrl[count($baseUrl)-2] ?? '-';
$controllerArray = explode('_', $controller);
$prefixMod = strtolower($controllerArray[0] ?? '-');
$conMod = strtolower($controllerArray[1] ?? '-');
$gougu = new Systematic();
$gougu->auth($uid);
$authListAll = Cache::get('RulesSrc0');
$authList = Cache::get('RulesSrc' . $uid);
$pathUrl = $prefixMod . '/' . $conMod . '/' . $action;
if (!in_array($pathUrl, $authList)) {
$this->apiError('用户无权限', [], 2);
}
}
}