46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
|
|
"""Schemas for universal entity permissions."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
from pydantic import BaseModel, Field
|
||
|
|
|
||
|
|
|
||
|
|
class EntityPermissionCreate(BaseModel):
|
||
|
|
principal_type: str = Field(..., pattern="^(user|group|role|guest)$")
|
||
|
|
principal_id: str
|
||
|
|
permission_level: str = Field("read", pattern="^(none|read|write|admin|delete)$")
|
||
|
|
expires_at: datetime | None = None
|
||
|
|
|
||
|
|
|
||
|
|
class EntityPermissionUpdate(BaseModel):
|
||
|
|
permission_level: str = Field(..., pattern="^(none|read|write|admin|delete)$")
|
||
|
|
expires_at: datetime | None = None
|
||
|
|
|
||
|
|
|
||
|
|
class EntityPermissionResponse(BaseModel):
|
||
|
|
id: str
|
||
|
|
entity_type: str
|
||
|
|
entity_id: str
|
||
|
|
principal_type: str
|
||
|
|
principal_id: str
|
||
|
|
principal_name: str | None = None
|
||
|
|
permission_level: str
|
||
|
|
expires_at: str | None = None
|
||
|
|
created_by: str | None = None
|
||
|
|
created_at: str | None = None
|
||
|
|
|
||
|
|
|
||
|
|
class EntityPermissionListResponse(BaseModel):
|
||
|
|
items: list[EntityPermissionResponse]
|
||
|
|
total: int
|
||
|
|
|
||
|
|
|
||
|
|
class EntityAccessResponse(BaseModel):
|
||
|
|
entity_type: str
|
||
|
|
entity_id: str
|
||
|
|
access_level: str
|
||
|
|
is_owner: bool
|
||
|
|
is_shared: bool
|