auth.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from datetime import datetime
  2. from typing import TYPE_CHECKING
  3. from pydantic import BaseModel, Field
  4. from core_domain import (
  5. PermissionCheckContract,
  6. PermissionCheckResultContract,
  7. RoleAssignmentContract,
  8. RoleAssignmentStatus,
  9. RoleContract,
  10. RoleStatus,
  11. UserContract,
  12. UserStatus,
  13. )
  14. from core_shared import JSONValue
  15. if TYPE_CHECKING:
  16. from app.db.models import Role, RoleAssignment, User
  17. class UserCreateRequest(BaseModel):
  18. tenant_id: str
  19. username: str
  20. display_name: str | None = None
  21. email: str | None = None
  22. metadata_json: dict[str, JSONValue] = Field(default_factory=dict)
  23. class UserStatusUpdateRequest(BaseModel):
  24. tenant_id: str
  25. status: UserStatus
  26. class UserResponse(UserContract):
  27. @classmethod
  28. def from_entity(cls, entity: "User") -> "UserResponse":
  29. return cls.model_validate(entity, from_attributes=True)
  30. class RoleCreateRequest(BaseModel):
  31. tenant_id: str
  32. code: str
  33. name: str
  34. description: str | None = None
  35. permissions_json: list[str] = Field(default_factory=list)
  36. class RoleStatusUpdateRequest(BaseModel):
  37. tenant_id: str
  38. status: RoleStatus
  39. class RoleResponse(RoleContract):
  40. @classmethod
  41. def from_entity(cls, entity: "Role") -> "RoleResponse":
  42. return cls.model_validate(entity, from_attributes=True)
  43. class RoleAssignmentCreateRequest(BaseModel):
  44. tenant_id: str
  45. user_id: str
  46. role_id: str
  47. scope_type: str | None = None
  48. scope_id: str | None = None
  49. expires_time: datetime | None = None
  50. class RoleAssignmentStatusUpdateRequest(BaseModel):
  51. tenant_id: str
  52. status: RoleAssignmentStatus
  53. class RoleAssignmentResponse(RoleAssignmentContract):
  54. @classmethod
  55. def from_entity(cls, entity: "RoleAssignment") -> "RoleAssignmentResponse":
  56. return cls.model_validate(entity, from_attributes=True)
  57. class PermissionCheckRequest(PermissionCheckContract):
  58. pass
  59. class PermissionCheckResponse(PermissionCheckResultContract):
  60. pass