fix : common request

This commit is contained in:
2025-09-16 18:07:10 +08:00
parent be0d0913b6
commit 21331655f9
9 changed files with 46 additions and 33 deletions

View File

@@ -50,7 +50,7 @@ class AdminLoginLogAspect extends AbstractAspect
*/ */
public function __construct( public function __construct(
protected readonly Logger $logger, protected readonly Logger $logger,
protected readonly RequestInterface $request, protected RequestInterface $request,
protected readonly AdminUserRepository $adminUserRepository, protected readonly AdminUserRepository $adminUserRepository,
protected readonly AdminUserLoginLog $adminUserLoginLogModel, protected readonly AdminUserLoginLog $adminUserLoginLogModel,
) {} ) {}
@@ -61,7 +61,7 @@ class AdminLoginLogAspect extends AbstractAspect
* @throws Exception * @throws Exception
* @throws Throwable * @throws Throwable
*/ */
public function process(ProceedingJoinPoint $proceedingJoinPoint) public function process(ProceedingJoinPoint $proceedingJoinPoint): mixed
{ {
// 写日志 // 写日志
@@ -87,23 +87,24 @@ class AdminLoginLogAspect extends AbstractAspect
*/ */
private function writeLoginLog(): void private function writeLoginLog(): void
{ {
Coroutine::create(function () { $userInfo = $this->adminUserRepository->findByUserName($this->request->input('username'));
$userInfo = $this->adminUserRepository->findByUserName($this->request->input('username'));
$context = [
'username' => $this->request->input('username',''),
'password' => $this->request->input('password',''),
'user_info' => $userInfo?->toArray() ?? [],
'ip' => $this->getClientIp(),
'os' => $this->getClientOs(),
'browser' => $this->request->header('User-Agent') ?: 'unknown',
];
$context = [
'username' => $this->request->input('username',''),
'password' => $this->request->input('password',''),
'user_info' => $userInfo?->toArray() ?? [],
'ip' => $this->getClientIp(),
'os' => $this->getClientOs(),
'browser' => $this->request->header('User-Agent') ?: 'unknown',
];
Coroutine::create(function () use ($userInfo, $context) {
$this->logger->request()->info('admin_login_log', $context); $this->logger->request()->info('admin_login_log', $context);
$this->adminUserLoginLogModel->save([ $this->adminUserLoginLogModel->create([
'admin_user_id' => $userInfo?->id ?? 0, 'admin_user_id' => $userInfo?->id ?? 0,
'username' => $userInfo?->username ?? '', 'username' => $userInfo?->username ?? '',
'ip' => $context['ip'], 'ip' => current($context['ip']) ?: '0.0.0.0',
'os' => $context['os'], 'os' => $context['os'],
'browser' => $context['browser'] ?? '', 'browser' => $context['browser'] ?? '',
'status' => $this->loginSuccess ? 1 : 2, 'status' => $this->loginSuccess ? 1 : 2,

View File

@@ -15,6 +15,7 @@ use Hyperf\Coroutine\Coroutine;
use Hyperf\Di\Annotation\Aspect; use Hyperf\Di\Annotation\Aspect;
use Hyperf\Di\Aop\AbstractAspect; use Hyperf\Di\Aop\AbstractAspect;
use Hyperf\Di\Aop\ProceedingJoinPoint; use Hyperf\Di\Aop\ProceedingJoinPoint;
use Hyperf\Di\Exception\Exception;
use Hyperf\HttpServer\Contract\RequestInterface; use Hyperf\HttpServer\Contract\RequestInterface;
#[Aspect] #[Aspect]
@@ -48,13 +49,18 @@ class AdminReturnLogAspect extends AbstractAspect
*/ */
public function __construct( public function __construct(
protected readonly Logger $logger, protected readonly Logger $logger,
protected readonly RequestInterface $request, protected RequestInterface $request,
protected readonly AdminUserOperationLog $adminUserOperationLogModel, protected readonly AdminUserOperationLog $adminUserOperationLogModel,
) { ) {
$this->adminId = Context::get('current_admin_id',0); $this->adminId = Context::get('current_admin_id',0);
if ($this->adminId > 0) $this->adminUserInfo = $this->getAdminUserInfo($this->adminId); if ($this->adminId > 0) $this->adminUserInfo = $this->getAdminUserInfo($this->adminId);
} }
/**
* @param ProceedingJoinPoint $proceedingJoinPoint
* @return mixed
* @throws Exception
*/
public function process(ProceedingJoinPoint $proceedingJoinPoint) public function process(ProceedingJoinPoint $proceedingJoinPoint)
{ {
// 直接从方法参数获取请求数据 // 直接从方法参数获取请求数据
@@ -63,11 +69,14 @@ class AdminReturnLogAspect extends AbstractAspect
// 执行原方法并获取返回值 // 执行原方法并获取返回值
$responseData = $proceedingJoinPoint->process(); $responseData = $proceedingJoinPoint->process();
// 没登录不记录日志
if ($this->adminId <= 0) return $responseData;
// 写日志 // 写日志
$this->writeOperationLog($requestData, $responseData); $this->writeOperationLog($requestData, $responseData);
// 返回 // 返回
return $requestData; return $responseData;
} }
/** /**
@@ -77,25 +86,25 @@ class AdminReturnLogAspect extends AbstractAspect
*/ */
private function writeOperationLog(array $requestData = [], array $responseData = []): void private function writeOperationLog(array $requestData = [], array $responseData = []): void
{ {
Coroutine::create(function () use ($requestData, $responseData) { $context = [
$context = [ 'user_id' => $this->adminId,
'user_id' => $this->adminId, 'method' => $this->request->getMethod(),
'method' => $this->request->getMethod(), 'router' => $this->request->getUri(),
'router' => $this->request->getUri(), 'ip' => $this->getClientIp(),
'ip' => $this->getClientIp(), 'request_data' => $requestData,
'request_data' => $requestData, 'response_data' => $responseData,
'response_data' => $responseData, ];
];
Coroutine::create(function () use ($requestData, $responseData, $context) {
$this->logger->request()->info('admin_request_log', $context); $this->logger->request()->info('admin_request_log', $context);
$this->adminUserOperationLogModel->save([ $this->adminUserOperationLogModel->create([
'admin_user_id' => $this->adminId, 'admin_user_id' => $this->adminId,
'username' => $this->adminUserInfo?->username ?? '', 'username' => $this->adminUserInfo?->username ?? '',
'method' => $context['method'], 'method' => $context['method'],
'router' => $context['router'], 'router' => $context['router'],
'service_name' => $context['service_name'] ?? '', 'service_name' => $context['service_name'] ?? '',
'ip' => $context['ip'], 'ip' => current($context['ip']) ?: '0.0.0.0',
]); ]);
}); });
} }

View File

@@ -15,7 +15,7 @@ trait ClientIpTrait
* @var RequestInterface * @var RequestInterface
*/ */
#[Inject] #[Inject]
protected readonly RequestInterface $request; protected RequestInterface $request;
/** /**
* @var string[] * @var string[]

View File

@@ -11,7 +11,7 @@ trait ClientOsTrait
* @var RequestInterface * @var RequestInterface
*/ */
#[Inject] #[Inject]
protected readonly RequestInterface $request; protected RequestInterface $request;
/** /**
* @return string * @return string

View File

@@ -45,7 +45,7 @@ class PermissionMiddleware implements MiddlewareInterface
*/ */
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{ {
$adminId = $this->getToken()?->claims()?->get(RegisteredClaims::ID) ?? 0; $adminId = (int) $this->getToken()?->claims()?->get(RegisteredClaims::ID) ?? 0;
if ($adminId <= 0) throw new ErrException('账户不存在'); if ($adminId <= 0) throw new ErrException('账户不存在');
$this->adminUserInfo = $this->getAdminUserInfo($adminId); $this->adminUserInfo = $this->getAdminUserInfo($adminId);

View File

@@ -34,7 +34,7 @@ class AdminUserLoginLog extends Model
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
*/ */
protected array $fillable = ['id', 'username', 'ip', 'os', 'browser', 'status', 'message', 'login_time', 'remark']; protected array $fillable = ['id','admin_user_id', 'username', 'ip', 'os', 'browser', 'status', 'message', 'login_time', 'remark'];
/** /**
* The attributes that should be cast to native types. * The attributes that should be cast to native types.

View File

@@ -28,7 +28,7 @@ class AdminUserOperationLog extends Model
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
*/ */
protected array $fillable = ['id', 'username', 'method', 'router', 'service_name', 'ip', 'ip_location', 'created_at', 'updated_at', 'remark']; protected array $fillable = ['id', 'admin_user_id','username', 'method', 'router', 'service_name', 'ip', 'ip_location', 'created_at', 'updated_at', 'remark'];
/** /**
* The attributes that should be cast to native types. * The attributes that should be cast to native types.

View File

@@ -19,6 +19,7 @@ use App\Constants\ResultCode;
use App\Exception\ErrException; use App\Exception\ErrException;
use App\Service\Admin\BaseAdminService; use App\Service\Admin\BaseAdminService;
use Hyperf\Collection\Arr; use Hyperf\Collection\Arr;
use Hyperf\Di\Annotation\Inject;
class PermissionService extends BaseAdminService class PermissionService extends BaseAdminService
{ {
@@ -27,11 +28,13 @@ class PermissionService extends BaseAdminService
/** /**
* @var AdminRoleRepository * @var AdminRoleRepository
*/ */
#[Inject]
protected AdminRoleRepository $adminRoleRepository; protected AdminRoleRepository $adminRoleRepository;
/** /**
* @var AdminMenuRepository * @var AdminMenuRepository
*/ */
#[Inject]
protected AdminMenuRepository $adminMenuRepository; protected AdminMenuRepository $adminMenuRepository;
/** /**

View File

@@ -58,7 +58,7 @@ class UserService extends BaseAdminService
return $this->adminReturn->success( return $this->adminReturn->success(
'success', 'success',
Arr::only( Arr::only(
$this->getAdminUserInfo($this->adminId) ?: [], $this->getAdminUserInfo($this->adminId)?->toArray() ?: [],
['username', 'nickname', 'avatar', 'signed', 'backend_setting', 'phone', 'email'] ['username', 'nickname', 'avatar', 'signed', 'backend_setting', 'phone', 'email']
) )
); );