models.py 964 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from dataclasses import dataclass
  2. from datetime import datetime
  3. @dataclass(frozen=True, slots=True)
  4. class H5User:
  5. id: str
  6. mobile: str
  7. mobile_masked: str
  8. display_name: str
  9. status: str
  10. created_at: datetime
  11. @dataclass(frozen=True, slots=True)
  12. class AdminUser:
  13. id: str
  14. username: str
  15. password_hash: str
  16. display_name: str
  17. status: str
  18. roles: tuple[str, ...]
  19. permissions: tuple[str, ...]
  20. data_scope: str
  21. @dataclass(frozen=True, slots=True)
  22. class AdminRole:
  23. code: str
  24. name: str
  25. data_scope: str
  26. status: str
  27. permissions: tuple[str, ...]
  28. @dataclass(slots=True)
  29. class AuthSession:
  30. id: str
  31. subject_type: str
  32. subject_id: str
  33. refresh_jti_hash: str
  34. expires_at: datetime
  35. revoked_at: datetime | None = None
  36. @property
  37. def active(self) -> bool:
  38. from datetime import UTC, datetime
  39. return self.revoked_at is None and self.expires_at > datetime.now(UTC)