Files
MrleeAdmin/backend/app/adminapi/controller/monitor/OnlineUserController.php
T
2026-08-31 11:33:59 +08:00

94 lines
2.8 KiB
PHP

<?php
declare(strict_types=1);
namespace app\adminapi\controller\monitor;
use app\adminapi\controller\Crud;
use app\adminapi\middleware\AccessTokenMiddleware;
use app\adminapi\middleware\OperationMiddleware;
use app\adminapi\middleware\PermissionMiddleware;
use app\service\admin\monitor\OnlineUserService;
use core\tool\Json;
use madong\swagger\annotation\response\SimpleResponse;
use madong\swagger\attribute\Permission;
use OpenApi\Attributes as OA;
use support\Container;
use support\Request;
use support\annotation\Middleware;
#[Middleware(AccessTokenMiddleware::class, PermissionMiddleware::class, OperationMiddleware::class)]
final class OnlineUserController extends Crud
{
#[OA\Get(
path: '/monitor/online-user',
summary: '在线用户列表',
tags: ['系统监控']
)]
#[Permission(code: 'monitor:online_user:list')]
#[SimpleResponse(schema: [], example: [])]
public function index(Request $request): \support\Response
{
try {
/** @var OnlineUserService $service */
$service = Container::get(OnlineUserService::class);
return Json::success('ok', $service->list($request->all()));
} catch (\Throwable $e) {
return Json::fail($e->getMessage(), [], $e->getCode());
}
}
#[OA\Delete(
path: '/monitor/online-user/{jti}',
summary: '踢下线',
tags: ['系统监控']
)]
#[OA\Parameter(
name: 'jti',
description: '会话JTI',
in: 'path',
required: true,
schema: new OA\Schema(type: 'string')
)]
#[Permission(code: 'monitor:online_user:kickout')]
#[SimpleResponse(schema: [], example: [])]
public function destroy(Request $request): \support\Response
{
try {
$jti = (string)$request->route->param('jti', '');
if ($jti === '') {
return Json::fail('会话JTI不能为空');
}
/** @var OnlineUserService $service */
$service = Container::get(OnlineUserService::class);
if (!$service->kickout($jti)) {
return Json::fail('会话不存在或已失效');
}
return Json::success('ok');
} catch (\Throwable $e) {
return Json::fail($e->getMessage(), [], $e->getCode());
}
}
#[OA\Post(
path: '/monitor/online-user/{jti}/revoke',
summary: '撤销Token',
tags: ['系统监控']
)]
#[OA\Parameter(
name: 'jti',
description: '会话JTI',
in: 'path',
required: true,
schema: new OA\Schema(type: 'string')
)]
#[Permission(code: 'monitor:online_user:revoke')]
#[SimpleResponse(schema: [], example: [])]
public function revoke(Request $request): \support\Response
{
return $this->destroy($request);
}
}