user_model.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. from datetime import datetime
  2. from sqlalchemy import Column, Integer, String, Table, ForeignKey, DateTime
  3. from sqlalchemy.orm import relationship, backref
  4. from app.models.base_model import Base
  5. user_organization_table = Table('user_organization',Base.metadata
  6. , Column('user_id', Integer, ForeignKey('user.id', ondelete='CASCADE'))
  7. , Column('organization_id', String(36), ForeignKey('organization.id', ondelete='CASCADE')))
  8. user_role_table = Table('user_role', Base.metadata
  9. , Column('user_id', Integer, ForeignKey('user.id', ondelete='CASCADE'))
  10. , Column('role_id', String(36), ForeignKey('role.id', ondelete='CASCADE')))
  11. user_group_table = Table('user_group', Base.metadata
  12. , Column('user_id', Integer, ForeignKey('user.id', ondelete='CASCADE'))
  13. , Column('group_id', Integer, ForeignKey('group.id', ondelete='CASCADE')))
  14. class UserModel(Base):
  15. __tablename__ = "user"
  16. id = Column(Integer, primary_key=True, index=True)
  17. username = Column(String(255), unique=True, index=True)
  18. hashed_password = Column(String(255))
  19. compellation = Column(String(255), nullable=False, default="")
  20. phone = Column(String(255), nullable=False, default="")
  21. email = Column(String(255), nullable=False, default="")
  22. description = Column(String(255), nullable=False, default="")
  23. ragflow_id = Column(String(32), unique=True, index=True)
  24. bisheng_id = Column(Integer, unique=True, index=True)
  25. login_name = Column(String(100))
  26. status = Column(String(10), nullable=False, default="1")
  27. creator = Column(String(36))
  28. sex = Column(String(1))
  29. age = Column(Integer)
  30. created_at = Column(DateTime, default=datetime.now())
  31. updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
  32. organizations = relationship('OrganizationModel',
  33. secondary=user_organization_table,
  34. backref=backref('users', lazy='dynamic'))
  35. roles = relationship('RoleModel',
  36. secondary=user_role_table,
  37. backref=backref('users', lazy='dynamic'))
  38. groups = relationship('GroupModel',
  39. secondary=user_group_table,
  40. backref=backref('users', lazy='dynamic'))
  41. def have_permission(self, url):
  42. permissions = []
  43. for resource in self.resources:
  44. permissions.extend(resource)
  45. if filter(lambda x: x.URL == url, permissions):
  46. return True
  47. permissions = []
  48. for organization in self.organizations:
  49. permissions.extend([resource for resource in organization.resources])
  50. return filter(lambda x: x.NAME == url, permissions)
  51. def __repr__(self):
  52. return '<User %r>\n' % (self.NAME)
  53. def to_dict(self):
  54. return {
  55. 'userId': self.id,
  56. 'userName': self.username,
  57. 'loginName': self.login_name if self.login_name else "",
  58. 'status': self.status,
  59. }
  60. def to_json(self):
  61. json = {
  62. 'userId': self.id,
  63. 'createTime': self.created_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else "",
  64. 'updateTime': self.updated_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else "",
  65. 'userName': self.username,
  66. 'loginName': self.login_name,
  67. 'sex': self.sex,
  68. 'age': self.age,
  69. "status": self.status,
  70. 'phone': self.phone,
  71. 'email': self.email,
  72. # 'phoneNumber': self.phone_number
  73. }
  74. if len(self.organizations) > 0:
  75. json['dept'] = [organization.to_json() for organization in self.organizations]
  76. json['groups'] = [group.to_dict() for group in self.groups]
  77. roles = []
  78. # if len(self.roles) > 0:
  79. roles = [role.to_json() for role in self.roles]
  80. organization_roles = [role.to_json() for organization in self.organizations for role in
  81. organization.roles]
  82. for role in organization_roles:
  83. if role not in roles:
  84. roles.append(role)
  85. json['roles'] = roles
  86. return json
  87. def get_children(self):
  88. """递归获取指定用户的子用户ID列表"""
  89. users = UserModel.query.filter_by(CREATOR=self.ID).all()
  90. user_id_list = [user.ID for user in users]
  91. for user in users:
  92. user_id_list.extend(user.get_children())
  93. return user_id_list