| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- from sqlalchemy import Boolean, Column, DateTime, ForeignKey, String, Text, text
- from sqlalchemy.dialects.postgresql import UUID
- from sqlalchemy.orm import relationship
- from sqlalchemy.sql import func
- from backend.app.db.base import Base
- class Role(Base):
- __tablename__ = "roles"
- id = Column(UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"))
- name = Column(String, unique=True, nullable=False)
- external_role_id = Column(String, unique=True)
- description = Column(Text)
- is_system = Column(Boolean, nullable=False, server_default="true")
- created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
- updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False)
- permissions = relationship("RolePermission", back_populates="role", cascade="all, delete-orphan")
- class Permission(Base):
- __tablename__ = "permissions"
- code = Column(String, primary_key=True)
- name = Column(String, nullable=False)
- module = Column(String, nullable=False)
- created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
- roles = relationship("RolePermission", back_populates="permission", cascade="all, delete-orphan")
- class RolePermission(Base):
- __tablename__ = "role_permissions"
- role_id = Column(UUID(as_uuid=True), ForeignKey("roles.id", ondelete="CASCADE"), primary_key=True)
- permission_code = Column(String, ForeignKey("permissions.code", ondelete="CASCADE"), primary_key=True)
- role = relationship("Role", back_populates="permissions")
- permission = relationship("Permission", back_populates="roles")
|