mirror of
https://gitee.com/ctexthuang/hyperf_rbac_framework_server_ctexthuang.git
synced 2025-12-25 18:17:49 +08:00
feat : admin aspect
This commit is contained in:
82
app/Aspect/AdminReturnAspect.php
Normal file
82
app/Aspect/AdminReturnAspect.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Aspect;
|
||||
|
||||
use App\Lib\Log\Logger;
|
||||
use App\Lib\Return\AdminReturn;
|
||||
use App\Trait\ClientIpTrait;
|
||||
use Hyperf\Context\Context;
|
||||
use Hyperf\Coroutine\Coroutine;
|
||||
use Hyperf\Di\Annotation\Aspect;
|
||||
use Hyperf\Di\Aop\AbstractAspect;
|
||||
use Hyperf\HttpServer\Contract\RequestInterface;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Hyperf\Di\Aop\ProceedingJoinPoint;
|
||||
|
||||
#[Aspect]
|
||||
class AdminReturnAspect extends AbstractAspect
|
||||
{
|
||||
use ClientIpTrait;
|
||||
|
||||
/**
|
||||
* 切入类
|
||||
* @var array|\class-string[]
|
||||
*/
|
||||
public array $classes = [
|
||||
AdminReturn::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected int $adminId = 0;
|
||||
|
||||
/**
|
||||
* @param Logger $logger
|
||||
* @param RequestInterface $request
|
||||
*/
|
||||
public function __construct(
|
||||
protected readonly Logger $logger,
|
||||
protected readonly RequestInterface $request,
|
||||
) {
|
||||
$this->adminId = Context::get('current_admin_id',0);
|
||||
}
|
||||
|
||||
public function process(ProceedingJoinPoint $proceedingJoinPoint)
|
||||
{
|
||||
// 直接从方法参数获取请求数据
|
||||
$requestData = $proceedingJoinPoint->getArguments()[0] ?? [];
|
||||
|
||||
// 执行原方法并获取返回值
|
||||
$responseData = $proceedingJoinPoint->process();
|
||||
|
||||
// 写日志
|
||||
$this->writeLog($requestData, $responseData);
|
||||
|
||||
// 返回
|
||||
return $requestData;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $requestData
|
||||
* @param array $responseData
|
||||
* @return void
|
||||
*/
|
||||
private function writeLog(array $requestData = [], array $responseData = []): void
|
||||
{
|
||||
Coroutine::create(function () use ($requestData, $responseData) {
|
||||
$context = [
|
||||
'user_id' => $this->adminId,
|
||||
'method' => $this->request->getMethod(),
|
||||
'router' => $this->request->getUri(),
|
||||
'ip' => $this->getClientIp(),
|
||||
'request_data' => $requestData,
|
||||
'response_data' => $responseData,
|
||||
];
|
||||
|
||||
$this->logger->request()->info('admin_request_log', $context);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user