diff --git a/app/modules/expense/router.py b/app/modules/expense/router.py index 8c118b1..7a5c8e0 100644 --- a/app/modules/expense/router.py +++ b/app/modules/expense/router.py @@ -109,18 +109,6 @@ def _require_approver(request: Request) -> dict[str, Any]: return user -def _require_admin(request: Request) -> dict[str, Any]: - from app.main import get_current_user_record # noqa: WPS433 - from app.store import is_admin # noqa: WPS433 - - user = get_current_user_record(request) - if user is None: - raise HTTPException(status_code=401, detail="로그인이 필요합니다.") - if not is_admin(user): - raise HTTPException(status_code=403, detail="관리자 권한이 필요합니다.") - return user - - def _require_db_store(store: Any) -> None: """워크플로/첨부/집계는 DB 모드 전용. JSON 폴백에서는 501.""" if not hasattr(store, "submit"): @@ -301,26 +289,26 @@ async def reports_page(request: Request) -> HTMLResponse: # ──────────────────────────────────────────────────────────── -# 관리자 설정 — 분류 관리 +# 승인자 설정 — 분류 관리 # ──────────────────────────────────────────────────────────── @router.get("/settings", response_class=HTMLResponse) async def settings_page(request: Request) -> HTMLResponse: - """관리자 전용 설정 — 분류 추가/삭제.""" + """승인자/관리자 설정 — 분류 추가/삭제.""" from app.main import ( # noqa: WPS433 build_erp_nav, get_current_user_record, render_template, ) - from app.store import is_admin # noqa: WPS433 + from app.store import has_module, is_admin # noqa: WPS433 user = get_current_user_record(request) if user is None: return RedirectResponse(url="/login", status_code=303) - if not is_admin(user): + if not (is_admin(user) or has_module(user, "expense_approver")): return render_template( request, "denied.html", - {"reason": "개인경비 설정은 관리자만 접근할 수 있습니다."}, + {"reason": "개인경비 설정은 승인자만 접근할 수 있습니다."}, status_code=403, ) return render_template( @@ -328,7 +316,7 @@ async def settings_page(request: Request) -> HTMLResponse: "expense/settings.html", { "user": user, - "is_admin": True, + "is_admin": is_admin(user), "categories": _categories(request), "nav_items": build_erp_nav(user, active="expense"), "page_title": "개인경비 — 설정", @@ -349,7 +337,7 @@ async def list_categories( async def add_category( request: Request, body: CategoryBody, - user: dict[str, Any] = Depends(_require_admin), + user: dict[str, Any] = Depends(_require_approver), ) -> JSONResponse: try: categories = _category_store(request).add(body.name) @@ -362,7 +350,7 @@ async def add_category( async def delete_category( request: Request, name: str, - user: dict[str, Any] = Depends(_require_admin), + user: dict[str, Any] = Depends(_require_approver), ) -> JSONResponse: try: categories = _category_store(request).delete(name) diff --git a/app/modules/expense/templates/expense/index.html b/app/modules/expense/templates/expense/index.html index 2cbb1d3..62cc4dd 100644 --- a/app/modules/expense/templates/expense/index.html +++ b/app/modules/expense/templates/expense/index.html @@ -15,7 +15,7 @@ {% if is_approver %} 엑셀(전체) {% endif %} - {% if is_admin %} + {% if is_approver %} ⚙ 설정 {% endif %}