""" Database models for the IAM module Models: - List: Description - Models: Description """ from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint from sqlalchemy.orm import relationship from src.database import Base class Permission(Base): __tablename__ = "permission" id = Column(Integer, primary_key=True) resource = Column(String, nullable=False) action = Column(String, nullable=False) service_id = Column(Integer, ForeignKey("service.id", ondelete="CASCADE")) UniqueConstraint("service_id", "resource", "action", name="uniq_permission_resource_and_action") class Group(Base): __tablename__ = "group" id = Column(Integer, primary_key=True) name = Column(String, nullable=False, unique=True) org_id = Column(Integer, ForeignKey("organisation.id", ondelete="CASCADE")) user_rel = relationship( "User", secondary="user_groups", back_populates="group_rel" ) org_rel = relationship("Organisation", back_populates="group_rel") class GroupPermissions(Base): __tablename__ = "group_permissions" group_id = Column(Integer, ForeignKey("group.id", ondelete="CASCADE"), primary_key=True) permission_id = Column(Integer, ForeignKey("permission.id", ondelete="CASCADE"), primary_key=True) class UserGroups(Base): __tablename__ = "user_groups" org_id = Column(Integer, ForeignKey("organisation.id", ondelete="CASCADE"), primary_key=True) user_id = Column(Integer, ForeignKey("user.id", ondelete="CASCADE"), primary_key=True) group_id = Column(Integer, ForeignKey("group.id", ondelete="CASCADE"), primary_key=True)