role_model.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from datetime import datetime
  2. from typing import Optional
  3. from pydantic import BaseModel, constr
  4. from sqlalchemy import Column, Integer, String, DateTime, Table, ForeignKey
  5. from sqlalchemy.orm import relationship, backref
  6. from app.models.base_model import Base
  7. # 角色资源关联表
  8. role_resource_table = Table('role_resource', Base.metadata,
  9. Column('role_id', String(36), ForeignKey('role.id', ondelete='CASCADE')),
  10. Column('resource_id', String(36), ForeignKey('resource.id', ondelete='CASCADE')))
  11. class RoleModel(Base):
  12. __tablename__ = 'role'
  13. id = Column(String(36), primary_key=True, index=True)
  14. created_at = Column(DateTime, default=datetime.now())
  15. updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
  16. name = Column(String(128), unique=True, nullable=False, index=True)
  17. description = Column(String(255))
  18. iconCls = Column(String(100))
  19. seq = Column(Integer)
  20. roleKey = Column(String(100))
  21. dataScope = Column(Integer)
  22. status = Column(String(10), default="0")
  23. creator = Column(Integer)
  24. role_type = Column(Integer, default=1)
  25. # 包含资源
  26. resources = relationship('ResourceModel',
  27. secondary=role_resource_table,
  28. backref=backref('roles', lazy='dynamic')) # 资源所属角色
  29. def get_id(self):
  30. return str(self.id)
  31. def to_dict(self):
  32. return dict([(k, getattr(self, k)) for k in self.__dict__.keys() if not k.startswith("_")])
  33. def __repr__(self):
  34. return '<Role name:%r description:%r iconCls:%r seq:%r>\n' \
  35. % (self.NAME, self.DESCRIPTION, self.ICONCLS, self.SEQ)
  36. def to_json(self):
  37. json = {
  38. 'roleId': self.id,
  39. 'createTime': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
  40. 'updateTime': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
  41. 'roleName': self.name,
  42. 'remark': self.description,
  43. 'iconCls': self.iconCls,
  44. 'roleSort': self.seq,
  45. 'status': self.status,
  46. 'roleKey': self.roleKey,
  47. 'dataScope': self.dataScope
  48. }
  49. if len(self.resources) > 0:
  50. json['resources'] = [resource.to_json() for resource in self.resources]
  51. if hasattr(self, 'flag'):
  52. json['flag'] = self.flag
  53. return json
  54. def to_dict(self):
  55. json = {
  56. 'roleId': self.id,
  57. 'createTime': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
  58. 'updateTime': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
  59. 'roleName': self.name,
  60. 'remark': self.description,
  61. 'iconCls': self.iconCls,
  62. 'roleSort': self.seq,
  63. 'status': self.status,
  64. 'roleKey': self.roleKey,
  65. 'dataScope': self.dataScope
  66. }
  67. return json
  68. class RoleData(BaseModel):
  69. remark: Optional[str] = ""
  70. roleName: str
  71. roleKey: Optional[str] = ""
  72. dataScope: Optional[int] = 0
  73. class RoleStatus(BaseModel):
  74. role_id: str
  75. status: constr(min_length=1, max_length=1, pattern='^(0|1)$')
  76. class RoleEdit(BaseModel):
  77. role_id: str
  78. remark: Optional[str] = ""
  79. roleName: Optional[str] = ""
  80. resources: Optional[list] = []
  81. roleKey: Optional[str] = ""
  82. dataScope: Optional[int] = 0
  83. editType: int