"""B01_Dashboard 권한 · 회사 범위 도우미 — 라우터 둘(본체 · 자산)이 함께 씀.""" from typing import Any from fastapi import Depends, HTTPException from common_util.common_util_auth import verify_session async def require_company_admin( session: dict[str, Any] = Depends(verify_session), ) -> dict[str, Any]: if session["role"] not in ("ADMIN", "SYSTEM_ADMIN") and not session["is_master"]: raise HTTPException(status_code=403, detail="회사 관리자 권한이 필요합니다.") return session def _require_company_id(session: dict[str, Any]) -> int: company_id = session.get("company_id") if company_id is None: raise HTTPException(status_code=403, detail="회사 연결이 필요합니다.") return int(company_id) def _same_company(session: dict[str, Any], company_id: int | None) -> bool: return company_id is not None and int(session.get("company_id") or 0) == int(company_id) def _scope_company(session: dict[str, Any], company_id: int | None) -> int: """회사 범위 자원의 회사 — 시스템관리자면 인자 우선(대시보드 회사 고르기) · 남은 세션 회사.""" if session["role"] == "SYSTEM_ADMIN" and company_id is not None: return int(company_id) own = _require_company_id(session) if company_id is not None and int(company_id) != own: raise HTTPException(status_code=403, detail="다른 회사의 자료는 볼 수 없습니다.") return own