from fastapi import APIRouter, Depends, Header from app.auth.metadata_dependencies import ( get_current_metadata_user, get_metadata_repository, ) from app.auth.permissions import resolve_permissions from app.auth.project_dependencies import resolve_project_context from app.domain.schemas.access import AccessContextResponse from app.infra.db.metadb.repositories.metadata_repository import MetadataRepository router = APIRouter() @router.get("/access-context", response_model=AccessContextResponse) async def get_access_context( x_project_id: str | None = Header(default=None, alias="X-Project-Id"), current_user=Depends(get_current_metadata_user), metadata_repo: MetadataRepository = Depends(get_metadata_repository), ) -> AccessContextResponse: project_context = ( await resolve_project_context(x_project_id, current_user, metadata_repo) if x_project_id else None ) permissions = resolve_permissions( project_role=project_context.project_role if project_context else None, system_role=current_user.role, is_superuser=current_user.is_superuser, ) return AccessContextResponse( user_id=current_user.id, username=current_user.username, system_role=current_user.role, is_system_admin=current_user.is_superuser or current_user.role == "admin", project_id=project_context.project_id if project_context else None, project_role=project_context.project_role if project_context else None, permissions=sorted(permissions), )