40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
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),
|
|
)
|