feat(api): 计提参数查看放开登录用户、修改仅管理员(#17/#6 答复)
- deps 新增 LoginUser 依赖;params 只读七端点改登录即可,写(提交/撤回)保持 AdminUser - 前端 params 路由 requiresAdmin → allowedRoles(admin/finance/leader);页面写按钮按角色显隐 - 权限用例分层:普通用户目录 200、提交/撤回 403、未登录拦截 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
1 parent
2652397720
commit
7008de0c69
5 files changed
+54
-19
No files matched your search
@@ -114,6 +114,10 @@ def require_admin(current_user: Annotated[User, Depends(get_current_user)]) -> U
|
||||
|
||||
AdminUser = Annotated[User, Depends(require_admin)]
|
||||
|
||||
# 仅要求登录态、不限角色(#17 答复 2026-10-19:薪酬敏感配置「查看可、修改仅
|
||||
# 管理员」——参数目录/历史/预览等只读端点用此依赖)
|
||||
LoginUser = Annotated[User, Depends(get_current_user)]
|
||||
|
||||
|
||||
def require_roles(*role_codes: str):
|
||||
"""要求当前用户具备任一指定角色(依赖工厂)。
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
"""计提参数管理接口(需求 #28:参数配置化 + 版本管理 + 留痕)。
|
||||
|
||||
全部要求管理员权限(开放问题 #5 的当前默认,后续可放宽只读);
|
||||
写操作(提交/撤回)经 `RequestMetaDep` 带入请求元信息写入操作日志,
|
||||
变更批次本身另行留痕(变更人/时间/项/旧值/新值/生效日期)——双保险。
|
||||
权限分层(澄清 #17 业务答复 2026-10-19「查看可、修改仅管理员」):只读
|
||||
端点(目录/变更记录/批次明细/对比/导出/预览/历史)要求登录即可;写操作
|
||||
(提交/撤回)仅管理员。写操作经 `RequestMetaDep` 带入请求元信息写入操作
|
||||
日志,变更批次本身另行留痕(变更人/时间/项/旧值/新值/生效日期)——双保险。
|
||||
导出为文件流(非统一信封),前端以 blob 接收。
|
||||
"""
|
||||
|
||||
@@ -12,7 +13,7 @@ from typing import Annotated
|
||||
from fastapi import APIRouter, Path, Query
|
||||
from fastapi.responses import StreamingResponse
|
||||
|
||||
from app.api.deps import AdminUser, DbSession, RequestMetaDep
|
||||
from app.api.deps import AdminUser, DbSession, LoginUser, RequestMetaDep
|
||||
from app.core.response import ApiResponse, PageResult, ok
|
||||
from app.schemas.param import (
|
||||
ParamBatchDetailOut,
|
||||
@@ -37,7 +38,7 @@ router = APIRouter(prefix="/params", tags=["系统管理 · 计提参数"])
|
||||
)
|
||||
def get_catalog(
|
||||
session: DbSession,
|
||||
_: AdminUser,
|
||||
_: LoginUser,
|
||||
as_of: Annotated[date | None, Query(description="业务日期,默认今日")] = None,
|
||||
) -> ApiResponse[list[ParamCatalogItemOut]]:
|
||||
"""全部启用参数的定义元数据与截至 asOf 的生效值(前端按分组展示)。"""
|
||||
@@ -63,7 +64,7 @@ def submit_change(
|
||||
)
|
||||
def list_changes(
|
||||
session: DbSession,
|
||||
_: AdminUser,
|
||||
_: LoginUser,
|
||||
query: Annotated[ParamBatchQuery, Query()],
|
||||
) -> ApiResponse[PageResult[ParamBatchOut]]:
|
||||
"""按生效日期区间分页查询变更批次(创建时间倒序)。"""
|
||||
@@ -75,7 +76,7 @@ def list_changes(
|
||||
)
|
||||
def get_batch(
|
||||
session: DbSession,
|
||||
_: AdminUser,
|
||||
_: LoginUser,
|
||||
batch_id: Annotated[int, Path(ge=1)],
|
||||
) -> ApiResponse[ParamBatchDetailOut]:
|
||||
"""批次头 + 逐项旧值 → 新值。"""
|
||||
@@ -97,7 +98,7 @@ def withdraw_batch(
|
||||
@router.get("/compare", response_model=ApiResponse[list[ParamDiffOut]], summary="两日期快照对比")
|
||||
def compare(
|
||||
session: DbSession,
|
||||
_: AdminUser,
|
||||
_: LoginUser,
|
||||
from_date: Annotated[date, Query(description="起始业务日期(含)")],
|
||||
to_date: Annotated[date, Query(description="截止业务日期(含)")],
|
||||
) -> ApiResponse[list[ParamDiffOut]]:
|
||||
@@ -108,7 +109,7 @@ def compare(
|
||||
@router.get("/export", summary="导出变更记录 Excel")
|
||||
def export_changes(
|
||||
session: DbSession,
|
||||
_: AdminUser,
|
||||
_: LoginUser,
|
||||
start_date: Annotated[date | None, Query(description="生效日期起(含)")] = None,
|
||||
end_date: Annotated[date | None, Query(description="生效日期止(含)")] = None,
|
||||
) -> StreamingResponse:
|
||||
@@ -125,7 +126,7 @@ def export_changes(
|
||||
@router.post("/preview", response_model=ApiResponse[ParamPreviewOut], summary="计算预览")
|
||||
def preview(
|
||||
session: DbSession,
|
||||
_: AdminUser,
|
||||
_: LoginUser,
|
||||
payload: ParamPreviewIn,
|
||||
) -> ApiResponse[ParamPreviewOut]:
|
||||
"""输入业务场景(岗位/产品/发货/回款/金额),按回款到账日取参数实时试算。"""
|
||||
@@ -139,7 +140,7 @@ def preview(
|
||||
)
|
||||
def get_history(
|
||||
session: DbSession,
|
||||
_: AdminUser,
|
||||
_: LoginUser,
|
||||
param_code: Annotated[str, Path(max_length=64)],
|
||||
query: Annotated[ParamHistoryQuery, Query()],
|
||||
) -> ApiResponse[PageResult[ParamHistoryOut]]:
|
||||
|
||||
Reference in new issue
Block a user