from __future__ import annotations from typing import Literal from pydantic import BaseModel, Field ProjectPermissionRole = Literal["ADMIN", "PM", "CRA", "PV", "MEDICAL_REVIEW", "IMP"] ProjectPermissionAction = Literal["read", "write"] class ProjectPermissionActionState(BaseModel): read: bool = False write: bool = False class ProjectPermissionModule(BaseModel): key: str label: str description: str | None = None writable: bool = True class ProjectRolePermissionMatrix(BaseModel): roles: dict[ProjectPermissionRole, dict[str, ProjectPermissionActionState]] class ProjectRolePermissionsRead(ProjectRolePermissionMatrix): modules: list[ProjectPermissionModule] class ProjectRolePermissionsUpdate(ProjectRolePermissionMatrix): roles: dict[ProjectPermissionRole, dict[str, ProjectPermissionActionState]] = Field(default_factory=dict)