diff --git a/backend/app/admin/api/v1/monitor/__init__.py b/backend/app/admin/api/v1/monitor/__init__.py index d9d4fa247..013c21879 100644 --- a/backend/app/admin/api/v1/monitor/__init__.py +++ b/backend/app/admin/api/v1/monitor/__init__.py @@ -2,6 +2,7 @@ # -*- coding: utf-8 -*- from fastapi import APIRouter +from backend.app.admin.api.v1.monitor.online import router as token_router from backend.app.admin.api.v1.monitor.redis import router as redis_router from backend.app.admin.api.v1.monitor.server import router as server_router @@ -9,3 +10,4 @@ router.include_router(redis_router, prefix='/redis', tags=['redis监控']) router.include_router(server_router, prefix='/server', tags=['服务器监控']) +router.include_router(token_router, prefix='/online', tags=['在线用户']) diff --git a/backend/app/admin/api/v1/sys/token.py b/backend/app/admin/api/v1/monitor/online.py similarity index 90% rename from backend/app/admin/api/v1/sys/token.py rename to backend/app/admin/api/v1/monitor/online.py index d7d1fd7a9..96f457623 100644 --- a/backend/app/admin/api/v1/sys/token.py +++ b/backend/app/admin/api/v1/monitor/online.py @@ -6,7 +6,7 @@ from fastapi import APIRouter, Depends, Path, Query, Request -from backend.app.admin.schema.token import GetTokenDetail, KickOutToken +from backend.app.admin.schema.token import GetTokenDetail from backend.common.enums import StatusType from backend.common.response.response_schema import ResponseModel, ResponseSchemaModel, response_base from backend.common.security.jwt import DependsJwtAuth, jwt_decode, revoke_token, superuser_verify @@ -18,8 +18,8 @@ router = APIRouter() -@router.get('', summary='获取令牌列表', dependencies=[DependsJwtAuth]) -async def get_tokens( +@router.get('', summary='获取在线用户', dependencies=[DependsJwtAuth]) +async def get_online( username: Annotated[str | None, Query(description='用户名')] = None, ) -> ResponseSchemaModel[list[GetTokenDetail]]: token_keys = await redis_client.keys(f'{settings.TOKEN_REDIS_PREFIX}:*') @@ -82,8 +82,10 @@ def append_token_detail() -> None: ], ) async def kick_out( - request: Request, pk: Annotated[int, Path(description='用户 ID')], obj: KickOutToken + request: Request, + pk: Annotated[int, Path(description='用户 ID')], + session_uuid: Annotated[str, Query(description='会话 UUID')], ) -> ResponseModel: superuser_verify(request) - await revoke_token(str(pk), obj.session_uuid) + await revoke_token(str(pk), session_uuid) return response_base.success() diff --git a/backend/app/admin/api/v1/sys/__init__.py b/backend/app/admin/api/v1/sys/__init__.py index b51691e41..e796d3763 100644 --- a/backend/app/admin/api/v1/sys/__init__.py +++ b/backend/app/admin/api/v1/sys/__init__.py @@ -8,7 +8,6 @@ from backend.app.admin.api.v1.sys.menu import router as menu_router from backend.app.admin.api.v1.sys.plugin import router as plugin_router from backend.app.admin.api.v1.sys.role import router as role_router -from backend.app.admin.api.v1.sys.token import router as token_router from backend.app.admin.api.v1.sys.upload import router as upload_router from backend.app.admin.api.v1.sys.user import router as user_router @@ -20,6 +19,5 @@ router.include_router(user_router, prefix='/users', tags=['系统用户']) router.include_router(data_rule_router, prefix='/data-rules', tags=['系统数据规则']) router.include_router(data_scope_router, prefix='/data-scopes', tags=['系统数据范围']) -router.include_router(token_router, prefix='/tokens', tags=['系统令牌']) router.include_router(upload_router, prefix='/upload', tags=['系统上传']) router.include_router(plugin_router, prefix='/plugin', tags=['系统插件']) diff --git a/backend/app/admin/schema/token.py b/backend/app/admin/schema/token.py index 5c33e07ef..8e91b7fcc 100644 --- a/backend/app/admin/schema/token.py +++ b/backend/app/admin/schema/token.py @@ -35,12 +35,6 @@ class GetLoginToken(AccessTokenBase): user: GetUserInfoDetail = Field(description='用户信息') -class KickOutToken(SchemaBase): - """踢出令牌""" - - session_uuid: str = Field(description='会话 UUID') - - class GetTokenDetail(SchemaBase): """令牌详情"""