role.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from sqlalchemy import Boolean, Column, DateTime, ForeignKey, String, Text, text
  2. from sqlalchemy.dialects.postgresql import UUID
  3. from sqlalchemy.orm import relationship
  4. from sqlalchemy.sql import func
  5. from backend.app.db.base import Base
  6. class Role(Base):
  7. __tablename__ = "roles"
  8. id = Column(UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"))
  9. name = Column(String, unique=True, nullable=False)
  10. external_role_id = Column(String, unique=True)
  11. description = Column(Text)
  12. is_system = Column(Boolean, nullable=False, server_default="true")
  13. created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
  14. updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False)
  15. permissions = relationship("RolePermission", back_populates="role", cascade="all, delete-orphan")
  16. class Permission(Base):
  17. __tablename__ = "permissions"
  18. code = Column(String, primary_key=True)
  19. name = Column(String, nullable=False)
  20. module = Column(String, nullable=False)
  21. created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
  22. roles = relationship("RolePermission", back_populates="permission", cascade="all, delete-orphan")
  23. class RolePermission(Base):
  24. __tablename__ = "role_permissions"
  25. role_id = Column(UUID(as_uuid=True), ForeignKey("roles.id", ondelete="CASCADE"), primary_key=True)
  26. permission_code = Column(String, ForeignKey("permissions.code", ondelete="CASCADE"), primary_key=True)
  27. role = relationship("Role", back_populates="permissions")
  28. permission = relationship("Permission", back_populates="roles")