mirror of
https://gitee.com/ctexthuang/hyperf_rbac_framework_server_ctexthuang.git
synced 2025-12-25 20:27:49 +08:00
fix : common request
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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',
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ trait ClientIpTrait
|
|||||||
* @var RequestInterface
|
* @var RequestInterface
|
||||||
*/
|
*/
|
||||||
#[Inject]
|
#[Inject]
|
||||||
protected readonly RequestInterface $request;
|
protected RequestInterface $request;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string[]
|
* @var string[]
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ trait ClientOsTrait
|
|||||||
* @var RequestInterface
|
* @var RequestInterface
|
||||||
*/
|
*/
|
||||||
#[Inject]
|
#[Inject]
|
||||||
protected readonly RequestInterface $request;
|
protected RequestInterface $request;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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']
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user