27 lines
957 B
Python
27 lines
957 B
Python
import secrets
|
||
from datetime import datetime
|
||
from sqlalchemy import String, Boolean, DateTime
|
||
from sqlalchemy.orm import Mapped, mapped_column
|
||
from app.core.database import Base
|
||
|
||
|
||
class ApiKeyModel(Base):
|
||
"""Гостевой API-ключ с ограниченными правами."""
|
||
|
||
__tablename__ = "api_keys"
|
||
|
||
key: Mapped[str] = mapped_column(String, primary_key=True)
|
||
name: Mapped[str] = mapped_column(String) # "Вася", "гости"
|
||
is_admin: Mapped[bool] = mapped_column(
|
||
Boolean, default=False
|
||
) # доступ к CRUD групп, расписаниям
|
||
active: Mapped[bool] = mapped_column(Boolean, default=True)
|
||
created_at: Mapped[str] = mapped_column(
|
||
String, default=lambda: datetime.now().isoformat()
|
||
)
|
||
|
||
@staticmethod
|
||
def generate_key() -> str:
|
||
"""Генерация безопасного случайного токена."""
|
||
return secrets.token_urlsafe(32)
|