role_model.py 3.4 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="1")
  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. json['dept'] = [dept.to_base_json() for dept in self.organizations]
  52. return json
  53. def to_dict(self):
  54. json = {
  55. 'roleId': self.id,
  56. 'createTime': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
  57. 'updateTime': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
  58. 'roleName': self.name,
  59. 'remark': self.description,
  60. 'iconCls': self.iconCls,
  61. 'roleSort': self.seq,
  62. 'status': self.status,
  63. 'roleKey': self.roleKey,
  64. 'dataScope': self.dataScope
  65. }
  66. return json
  67. class RoleData(BaseModel):
  68. remark: Optional[str] = ""
  69. roleName: str
  70. roleKey: Optional[str] = ""
  71. dataScope: Optional[int] = 0
  72. class RoleStatus(BaseModel):
  73. roleId: str
  74. status: constr(min_length=1, max_length=1, pattern='^(0|1)$')
  75. class RoleEdit(BaseModel):
  76. roleId: str
  77. remark: Optional[str] = ""
  78. roleName: Optional[str] = ""
  79. resources: Optional[list] = []
  80. roleKey: Optional[str] = ""
  81. dataScope: Optional[int] = 0
  82. editType: int
  83. depts: Optional[list] = []