Update plugins and monitoring permissions (#1126)

This commit is contained in:
Wu Clan
2026-03-24 15:59:22 +08:00
committed by GitHub
parent 5ff7f4bc69
commit a97dab1716
8 changed files with 73 additions and 103 deletions
+2 -2
View File
@@ -7,14 +7,14 @@ from fastapi import APIRouter, Path, Query
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, DependsSuperUser, jwt_decode, revoke_token
from backend.common.security.jwt import DependsSuperUser, jwt_decode, revoke_token
from backend.core.conf import settings
from backend.database.redis import redis_client
router = APIRouter()
@router.get('', summary='获取在线用户', dependencies=[DependsJwtAuth])
@router.get('', summary='获取在线用户', dependencies=[DependsSuperUser])
async def get_sessions(
username: Annotated[str | None, Query(description='用户名')] = None,
) -> ResponseSchemaModel[list[GetTokenDetail]]:
+2 -2
View File
@@ -20,14 +20,14 @@ from backend.app.admin.schema.monitor import (
SysInfo,
)
from backend.common.response.response_schema import ResponseSchemaModel, response_base
from backend.common.security.jwt import DependsJwtAuth
from backend.common.security.jwt import DependsSuperUser
from backend.utils.format import fmt_bytes, fmt_seconds
from backend.utils.timezone import timezone
router = APIRouter()
@router.get('', summary='Server 监控', dependencies=[DependsJwtAuth])
@router.get('', summary='Server 监控', dependencies=[DependsSuperUser])
async def get_server_info() -> ResponseSchemaModel[ServerMonitorInfo]: # noqa: C901
def get_all_info() -> ServerMonitorInfo: # noqa: C901
# CPU 信息
+8 -23
View File
@@ -1,6 +1,6 @@
from typing import Annotated, Any
from fastapi import APIRouter, Depends, File, Path, UploadFile
from fastapi import APIRouter, File, Path, UploadFile
from fastapi.params import Query
from starlette.responses import StreamingResponse
@@ -8,20 +8,18 @@ from backend.app.admin.service.plugin_service import plugin_service
from backend.common.enums import PluginType
from backend.common.response.response_code import CustomResponse
from backend.common.response.response_schema import ResponseModel, ResponseSchemaModel, response_base
from backend.common.security.jwt import DependsJwtAuth
from backend.common.security.permission import RequestPermission
from backend.common.security.rbac import DependsRBAC
from backend.common.security.jwt import DependsSuperUser
router = APIRouter()
@router.get('', summary='获取所有插件', dependencies=[DependsJwtAuth])
@router.get('', summary='获取所有插件', dependencies=[DependsSuperUser])
async def get_all_plugins() -> ResponseSchemaModel[list[dict[str, Any]]]:
plugins = await plugin_service.get_all()
return response_base.success(data=plugins)
@router.get('/changed', summary='是否存在插件变更', dependencies=[DependsJwtAuth])
@router.get('/changed', summary='是否存在插件变更', dependencies=[DependsSuperUser])
async def plugin_changed() -> ResponseSchemaModel[bool]:
plugins = await plugin_service.changed()
return response_base.success(data=bool(plugins))
@@ -31,10 +29,7 @@ async def plugin_changed() -> ResponseSchemaModel[bool]:
'',
summary='安装插件',
description='使用插件 zip 压缩包或 git 仓库地址进行安装(仅开发环境)',
dependencies=[
Depends(RequestPermission('sys:plugin:install')),
DependsRBAC,
],
dependencies=[DependsSuperUser],
)
async def install_plugin(
type: Annotated[PluginType, Query(description='插件类型')],
@@ -54,10 +49,7 @@ async def install_plugin(
'/{plugin}',
summary='卸载插件',
description='此操作会直接删除插件依赖,但不会直接删除插件,而是将插件移动到备份目录(仅开发环境)',
dependencies=[
Depends(RequestPermission('sys:plugin:uninstall')),
DependsRBAC,
],
dependencies=[DependsSuperUser],
)
async def uninstall_plugin(plugin: Annotated[str, Path(description='插件名称')]) -> ResponseModel:
await plugin_service.uninstall(plugin=plugin)
@@ -66,20 +58,13 @@ async def uninstall_plugin(plugin: Annotated[str, Path(description='插件名称
)
@router.put(
'/{plugin}/status',
summary='更新插件状态',
dependencies=[
Depends(RequestPermission('sys:plugin:edit')),
DependsRBAC,
],
)
@router.put('/{plugin}/status', summary='更新插件状态', dependencies=[DependsSuperUser])
async def update_plugin_status(plugin: Annotated[str, Path(description='插件名称')]) -> ResponseModel:
await plugin_service.update_status(plugin=plugin)
return response_base.success()
@router.get('/{plugin}', summary='下载插件', dependencies=[DependsJwtAuth])
@router.get('/{plugin}', summary='下载插件', dependencies=[DependsSuperUser])
async def download_plugin(plugin: Annotated[str, Path(description='插件名称')]) -> StreamingResponse:
bio = await plugin_service.build(plugin=plugin)
return StreamingResponse(