feat: add tenant-scoped rule and permission management

This commit is contained in:
wren
2026-05-21 22:03:08 +08:00
parent a2c2bf1969
commit 1f1bccf3b3
193 changed files with 64463 additions and 1771 deletions
@@ -40,7 +40,8 @@ class ContractTemplateController(BaseController):
keyword: str | None = Query(None, description="关键词"),
category_id: int | None = Query(None, description="分类ID"),
category_name: str | None = Query(None, description="分类名称"),
region: str | None = Query(None, description="地区"),
region: str | None = Query(None, description="兼容保留字段:租户展示值/旧地区"),
tenant_code: str | None = Query(None, description="租户编码"),
file_format: str | None = Query(None, description="文件格式"),
is_featured: bool | None = Query(None, description="是否推荐"),
page: int = Query(1, ge=1, description="页码"),
@@ -56,6 +57,7 @@ class ContractTemplateController(BaseController):
category_id=category_id,
category_name=category_name,
region=region,
tenant_code=tenant_code,
file_format=file_format,
is_featured=is_featured,
page=page,
@@ -72,6 +74,7 @@ class ContractTemplateController(BaseController):
template_code: str = Form(...),
category_id: int = Form(...),
region: str | None = Form(default=None),
tenant_code: str | None = Form(default=None),
description: str | None = Form(default=None),
is_featured: bool = Form(default=False),
file: UploadFile = File(...),
@@ -79,12 +82,13 @@ class ContractTemplateController(BaseController):
payload: dict = Depends(verify_access_token),
):
if not await self._check_permission(int(payload["user_id"]), ["contract_template:create:write"]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前仅允许地区管理员上传合同模板", "data": None})
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前仅允许租户管理员上传合同模板", "data": None})
body = ContractTemplateCreateDTO(
title=title,
template_code=template_code,
category_id=category_id,
region=region,
tenant_code=tenant_code,
description=description,
is_featured=is_featured,
)
@@ -96,7 +100,8 @@ class ContractTemplateController(BaseController):
q: str = Query(..., min_length=1, description="搜索关键词"),
category_id: int | None = Query(None, description="分类ID"),
category_name: str | None = Query(None, description="分类名称"),
region: str | None = Query(None, description="地区"),
region: str | None = Query(None, description="兼容保留字段:租户展示值/旧地区"),
tenant_code: str | None = Query(None, description="租户编码"),
page: int = Query(1, ge=1, description="页码"),
page_size: int = Query(12, ge=1, le=200, description="分页大小"),
sort_by: str = Query("updated_at", description="排序字段"),
@@ -110,6 +115,7 @@ class ContractTemplateController(BaseController):
category_id=category_id,
category_name=category_name,
region=region,
tenant_code=tenant_code,
page=page,
page_size=page_size,
sort_by=sort_by,