from __future__ import annotations from typing import Optional import uuid from datetime import datetime from sqlalchemy import Boolean, DateTime, ForeignKey, String, UniqueConstraint, func from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from app.db.base_class import Base class ApiEndpointPermission(Base): """接口级权限配置表 存储每个项目中每个角色对特定API端点的权限配置。 支持细粒度的接口级权限控制,解决跨模块数据访问的权限混乱问题。 """ __tablename__ = "api_endpoint_permissions" __table_args__ = ( UniqueConstraint("study_id", "role", "endpoint_key", name="uq_api_endpoint_perm"), ) id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) study_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey("studies.id"), nullable=False, index=True) role: Mapped[str] = mapped_column(String(20), nullable=False, index=True) endpoint_key: Mapped[str] = mapped_column(String(100), nullable=False) allowed: Mapped[bool] = mapped_column(Boolean, nullable=False, server_default="false") updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, server_default=func.now(), onupdate=func.now())