初始化-安装依赖

This commit is contained in:
2026-03-03 10:06:12 +08:00
parent 3f349a35a4
commit ec8cac4221
187 changed files with 26292 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
<?php
// +----------------------------------------------------------------------
// | saiadmin [ saiadmin快速开发框架 ]
// +----------------------------------------------------------------------
// | Author: sai <1430792918@qq.com>
// +----------------------------------------------------------------------
namespace plugin\saiadmin\app\middleware;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;
use plugin\saiadmin\app\cache\UserAuthCache;
use plugin\saiadmin\app\cache\ReflectionCache;
use plugin\saiadmin\exception\SystemException;
/**
* 权限检查中间件
*/
class CheckAuth implements MiddlewareInterface
{
public function process(Request $request, callable $handler) : Response
{
$controller = $request->controller;
$action = $request->action;
// 通过反射获取控制器哪些方法不需要登录
$noNeedLogin = ReflectionCache::getNoNeedLogin($controller);
// 不登录访问,无需权限验证
if (in_array($action, $noNeedLogin)) {
return $handler($request);
}
// 登录信息
$token = getCurrentInfo();
if ($token === false) {
throw new SystemException('用户信息读取失败,无法访问或操作');
}
// 系统默认超级管理员,无需权限验证
if ($token['id'] === 1) {
return $handler($request);
}
// 2. 获取接口权限属性 (使用缓存类)
$permissions = ReflectionCache::getPermissionAttributes($controller, $action);
if (!empty($permissions) && !empty($permissions['slug'])) {
// 用户权限缓存
$auth = UserAuthCache::getUserAuth($token['id']);
if (!$this->checkPermissions($permissions, $auth)) {
throw new SystemException('权限不足,无法访问或操作');
}
}
return $handler($request);
}
/**
* 检查权限
*/
private function checkPermissions(array $attr, array $userPermissions): bool
{
// 直接对比 slug
return in_array($attr['slug'], $userPermissions);
}
}

View File

@@ -0,0 +1,40 @@
<?php
// +----------------------------------------------------------------------
// | saiadmin [ saiadmin快速开发框架 ]
// +----------------------------------------------------------------------
// | Author: sai <1430792918@qq.com>
// +----------------------------------------------------------------------
namespace plugin\saiadmin\app\middleware;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;
use Tinywan\Jwt\JwtToken;
use plugin\saiadmin\app\cache\ReflectionCache;
use plugin\saiadmin\exception\ApiException;
/**
* 登录检查中间件
*/
class CheckLogin implements MiddlewareInterface
{
public function process(Request $request, callable $handler): Response
{
// 通过反射获取控制器哪些方法不需要登录
$noNeedLogin = ReflectionCache::getNoNeedLogin($request->controller);
// 访问的方法需要登录
if (!in_array($request->action, $noNeedLogin)) {
try {
$token = JwtToken::getExtend();
} catch (\Throwable $e) {
throw new ApiException('您的登录凭证错误或者已过期,请重新登录', 401);
}
if ($token['plat'] !== 'saiadmin') {
throw new ApiException('登录凭证校验失败');
}
$request->setHeader('check_login', true);
$request->setHeader('check_admin', $token);
}
return $handler($request);
}
}

View File

@@ -0,0 +1,33 @@
<?php
// +----------------------------------------------------------------------
// | saiadmin [ saiadmin快速开发框架 ]
// +----------------------------------------------------------------------
// | Author: sai <1430792918@qq.com>
// +----------------------------------------------------------------------
namespace plugin\saiadmin\app\middleware;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;
/**
* 跨域中间件
*/
class CrossDomain implements MiddlewareInterface
{
public function process(Request $request, callable $handler) : Response
{
// 如果是options请求则返回一个空响应否则继续向洋葱芯穿越并得到一个响应
$response = $request->method() == 'OPTIONS' ? response('') : $handler($request);
// 给响应添加跨域相关的http头
$response->withHeaders([
'Access-Control-Allow-Credentials' => 'true',
'Access-Control-Allow-Origin' => $request->header('origin', '*'),
'Access-Control-Allow-Methods' => $request->header('access-control-request-method', '*'),
'Access-Control-Allow-Headers' => $request->header('access-control-request-headers', '*'),
]);
return $response;
}
}

View File

@@ -0,0 +1,38 @@
<?php
// +----------------------------------------------------------------------
// | saiadmin [ saiadmin快速开发框架 ]
// +----------------------------------------------------------------------
// | Author: sai <1430792918@qq.com>
// +----------------------------------------------------------------------
namespace plugin\saiadmin\app\middleware;
use Webman\Event\Event;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;
use plugin\saiadmin\exception\ApiException;
use plugin\saiadmin\app\cache\ReflectionCache;
class SystemLog implements MiddlewareInterface
{
/**
* @param Request $request
* @param callable $handler
* @return Response
*/
public function process(Request $request, callable $handler): Response
{
// 通过反射获取控制器哪些方法不需要登录
$noNeedLogin = ReflectionCache::getNoNeedLogin($request->controller);
// 访问的方法需要登录
if (!in_array($request->action, $noNeedLogin)) {
try {
// 记录日志
Event::emit('user.operateLog', true);
} catch (\Throwable $e) {
throw new ApiException('登录凭获取失败,请检查');
}
}
return $handler($request);
}
}