user-wsc/AppUser/Model/RoleModel.py

48 lines
1.5 KiB
Python

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