feat: 新增权限指令并集成到多个页面组件

refactor(backend): 重构数据库模型和初始化逻辑

fix(frontend): 修复权限指令在多个组件中的使用问题

perf(backend): 优化数据库连接和初始化性能

docs: 更新低代码生成器的README文档

style: 清理无用代码和注释

chore: 移除不再需要的依赖项

test: 更新用户权限相关测试用例

ci: 更新CI配置以支持新的权限检查

build: 更新依赖项版本
This commit is contained in:
zhangtao
2025-09-28 23:42:26 +08:00
parent 3138fde133
commit 0aeb77e0bd
91 changed files with 5102 additions and 3872 deletions
@@ -2,17 +2,20 @@
from fastapi import APIRouter, Body, Depends, Path, Query, Request, UploadFile, Form
from fastapi.responses import JSONResponse, StreamingResponse, FileResponse
import urllib.parse
import os
from typing import List, Optional
from app.common.response import StreamResponse, SuccessResponse
from app.common.response import StreamResponse, SuccessResponse, ErrorResponse
from app.common.request import PaginationService
from app.utils.common_util import bytes2file_response
from app.core.base_params import PaginationQueryParam
from app.core.dependencies import AuthPermission
from app.core.router_class import OperationLogRoute
from app.core.logger import logger
from ...module_system.auth.schema import AuthSchema
from .param import ResourceQueryParam
from .param import ResourceSearchQueryParam
from .schema import (
ResourceSearchSchema,
ResourceMoveSchema,
ResourceCopySchema,
ResourceRenameSchema,
@@ -20,44 +23,33 @@ from .schema import (
)
from .service import ResourceService
ResourceRouter = APIRouter(route_class=OperationLogRoute, prefix="/resource", tags=["资源管理"])
@ResourceRouter.get("/list", summary="获取目录列表", description="获取指定目录下的文件和子目录列表")
async def get_directory_list_controller(
request: Request,
path: Optional[str] = Query(None, description="目录路径"),
include_hidden: bool = Query(False, description="是否包含隐藏文件"),
page: PaginationQueryParam = Depends(),
search: ResourceSearchQueryParam = Depends(),
auth: AuthSchema = Depends(AuthPermission(permissions=["monitor:resource:query"]))
) -> JSONResponse:
"""获取目录列表"""
result_dict = await ResourceService.get_directory_list_service(
auth=auth,
path=path,
include_hidden=include_hidden,
# 获取资源列表(与案例模块保持一致的分页实现)
result_dict_list = await ResourceService.get_resources_list_service(
search=search,
order_by=page.order_by,
base_url=str(request.base_url)
)
logger.info(f"获取目录列表成功: {path or 'default'}")
# 使用分页服务进行分页处理(与案例模块保持一致)
result_dict = await PaginationService.paginate(
data_list=result_dict_list,
page_no=page.page_no,
page_size=page.page_size
)
logger.info(f"获取目录列表成功: {getattr(search, 'name', None) or ''}")
return SuccessResponse(data=result_dict, msg="获取目录列表成功")
@ResourceRouter.post("/search", summary="搜索资源", description="根据条件搜索资源")
async def search_resources_controller(
request: Request,
search: ResourceSearchSchema,
auth: AuthSchema = Depends(AuthPermission(permissions=["monitor:resource:search"]))
) -> JSONResponse:
"""搜索资源"""
result_list = await ResourceService.search_resources_service(
auth=auth,
search=search,
base_url=str(request.base_url)
)
logger.info(f"搜索资源成功,找到 {len(result_list)} 个结果")
return SuccessResponse(data=result_list, msg=f"搜索成功,找到 {len(result_list)} 个结果")
@ResourceRouter.post("/upload", summary="上传文件", description="上传文件到指定目录")
async def upload_file_controller(
file: UploadFile,
@@ -137,7 +129,7 @@ async def copy_file_controller(
@ResourceRouter.post("/rename", summary="重命名文件", description="重命名文件或目录")
async def rename_file_controller(
data: ResourceRenameSchema,
auth: AuthSchema = Depends(AuthPermission(permissions=["rmonitor:resource:rename"]))
auth: AuthSchema = Depends(AuthPermission(permissions=["monitor:resource:rename"]))
) -> JSONResponse:
"""重命名文件"""
await ResourceService.rename_file_service(auth=auth, data=data)
@@ -156,34 +148,19 @@ async def create_directory_controller(
return SuccessResponse(msg="创建目录成功")
@ResourceRouter.get("/stats", summary="获取资源统计", description="获取资源统计信息")
async def get_resource_stats_controller(
request: Request,
auth: AuthSchema = Depends(AuthPermission(permissions=["monitor:resource:query"]))
) -> JSONResponse:
"""获取资源统计"""
result_dict = await ResourceService.get_stats_service(
auth=auth,
base_url=str(request.base_url)
)
logger.info("获取资源统计成功")
return SuccessResponse(data=result_dict, msg="获取资源统计成功")
@ResourceRouter.post("/export", summary="导出资源列表", description="导出资源列表")
async def export_resource_list_controller(
request: Request,
search: ResourceSearchSchema,
search: ResourceSearchQueryParam = Depends(),
auth: AuthSchema = Depends(AuthPermission(permissions=["monitor:resource:export"]))
) -> StreamingResponse:
"""导出资源列表"""
# 获取搜索结果
result_list = await ResourceService.search_resources_service(
auth=auth,
result_dict_list = await ResourceService.search_resources_service(
search=search,
base_url=str(request.base_url)
)
export_result = await ResourceService.export_resource_service(data_list=result_list)
export_result = await ResourceService.export_resource_service(data_list=result_dict_list)
logger.info("导出资源列表成功")
return StreamResponse(