| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- from dataclasses import dataclass
- from datetime import datetime
- @dataclass(frozen=True, slots=True)
- class H5User:
- id: str
- mobile: str
- mobile_masked: str
- display_name: str
- status: str
- created_at: datetime
- @dataclass(frozen=True, slots=True)
- class AdminUser:
- id: str
- username: str
- password_hash: str
- display_name: str
- status: str
- roles: tuple[str, ...]
- permissions: tuple[str, ...]
- data_scope: str
- @dataclass(frozen=True, slots=True)
- class AdminRole:
- code: str
- name: str
- data_scope: str
- status: str
- permissions: tuple[str, ...]
- @dataclass(slots=True)
- class AuthSession:
- id: str
- subject_type: str
- subject_id: str
- refresh_jti_hash: str
- expires_at: datetime
- revoked_at: datetime | None = None
- @property
- def active(self) -> bool:
- from datetime import UTC, datetime
- return self.revoked_at is None and self.expires_at > datetime.now(UTC)
|