45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
|
|
"""
|
||
|
|
用户模型 — SQLModel
|
||
|
|
|
||
|
|
角色体系(不再改):
|
||
|
|
- zhipianren = 制片人 / 管理员 = 全部权限
|
||
|
|
- zebian = 责编 = 维护仪表盘 / 知识库 / 排期
|
||
|
|
- biandao = 编导 = 使用 TPS / 查看知识库 / 生成报题单 / 个人热点雷达
|
||
|
|
"""
|
||
|
|
|
||
|
|
from enum import Enum
|
||
|
|
from datetime import datetime, timezone
|
||
|
|
|
||
|
|
from sqlalchemy import Column
|
||
|
|
from sqlalchemy import DateTime as SADateTime
|
||
|
|
from sqlalchemy.sql import func as sa_func
|
||
|
|
from sqlmodel import Field, SQLModel
|
||
|
|
|
||
|
|
|
||
|
|
class UserRole(str, Enum):
|
||
|
|
"""用户角色枚举,值与数据库 CHECK 约束一致。"""
|
||
|
|
zhipianren = "zhipianren" # 制片人 / 管理员
|
||
|
|
zebian = "zebian" # 责编
|
||
|
|
biandao = "biandao" # 编导
|
||
|
|
|
||
|
|
|
||
|
|
class User(SQLModel, table=True):
|
||
|
|
__tablename__ = "users"
|
||
|
|
|
||
|
|
id: int | None = Field(default=None, primary_key=True)
|
||
|
|
username: str = Field(max_length=50, unique=True, index=True)
|
||
|
|
display_name: str = Field(max_length=100)
|
||
|
|
password_hash: str = Field(max_length=128)
|
||
|
|
role: UserRole = Field(default=UserRole.biandao, max_length=20)
|
||
|
|
profile_text: str | None = Field(default=None)
|
||
|
|
is_active: bool = Field(default=True)
|
||
|
|
|
||
|
|
created_at: datetime | None = Field(
|
||
|
|
default=None,
|
||
|
|
sa_column=Column(SADateTime(timezone=True), nullable=False, server_default=sa_func.now()),
|
||
|
|
)
|
||
|
|
updated_at: datetime | None = Field(
|
||
|
|
default=None,
|
||
|
|
sa_column=Column(SADateTime(timezone=True), nullable=False, server_default=sa_func.now()),
|
||
|
|
)
|