from sqlalchemy.orm import relationship from sqlalchemy import Column, String, ForeignKey, Enum from Utils.DataBase.SqlAlchemyUtils import Base class RoleAccessPolicy(Base): __tablename__ = "role_access_policy" id = Column(String(20), primary_key=True) module = Column(String(64)) ptype = Column(Enum("p")) sub = Column(String(32), comment="subject") obj = Column(String(255), comment="object") act = Column(String(128), comment="action") role_id = Column(String(32), ForeignKey("role.id", ondelete="CASCADE")) def to_dict(self): rcp_dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} return rcp_dict class RoleMenu(Base): __tablename__ = "role_menu" id = Column(String(20), primary_key=True) subject = Column(String(20), comment="栏目") role_id = Column(String(32), ForeignKey("role.id", ondelete="CASCADE")) class Role(Base): __tablename__ = "role" id = Column(String(6), primary_key=True) name = Column(String(32), unique=True, index=True) role_menu = relationship(RoleMenu, backref="role", cascade="all, delete-orphan") role_access_policy = relationship(RoleAccessPolicy, backref="role", cascade="all, delete-orphan") def __repr__(self): return self.name def to_dict(self): role_dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} raps = [policy.to_dict() for policy in self.role_access_policy] role_dict.update({"raps": raps}) return role_dict