# ============================================================================= # 角色模型 — roles 表 # ============================================================================= # 说明:定义系统角色(user/agent/admin),支持 RBAC 权限控制 # ============================================================================= import uuid from datetime import datetime from typing import Optional from sqlalchemy import String, Boolean, DateTime, Text, JSON from sqlalchemy.orm import Mapped, mapped_column from app.database import Base class Role(Base): """角色模型 — 对应 roles 表。 预置三个角色: - user: 所有在职员工默认角色(is_default=True) - agent: IT坐席,通过企微标签或eHR字段映射 - admin: 管理员,通过管理后台手动绑定 """ __tablename__ = "roles" # 主键:UUID id: Mapped[str] = mapped_column( String(36), primary_key=True, default=lambda: str(uuid.uuid4()), ) # 角色标识:user/agent/admin(唯一) name: Mapped[str] = mapped_column( String(50), unique=True, nullable=False, comment="角色标识:user/agent/admin", ) # 显示名称:用户/坐席/管理员 display_name: Mapped[str] = mapped_column( String(100), nullable=False, comment="显示名称:用户/坐席/管理员", ) # 角色描述 description: Mapped[Optional[str]] = mapped_column( Text, nullable=True, comment="角色描述", ) # 权限列表(JSON数组) permissions: Mapped[list] = mapped_column( JSON, nullable=False, default=list, comment="权限列表(JSON数组)", ) # 是否默认角色(user=True) is_default: Mapped[bool] = mapped_column( Boolean, nullable=False, default=False, comment="是否默认角色(所有员工自动获得)", ) # 创建时间 created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, default=datetime.now, comment="创建时间", ) # 更新时间(自动刷新) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间", ) def __repr__(self) -> str: return f""