User.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from app import db, loginmanager
  2. from flask_login import UserMixin, AnonymousUserMixin
  3. from datetime import datetime
  4. @loginmanager.user_loader
  5. def load_user(user_id):
  6. return User.query.filter(User.ID == user_id).first()
  7. user_organization_table = db.Table('SYUSER_SYORGANIZATION', db.Model.metadata
  8. , db.Column('SYUSER_ID', db.String, db.ForeignKey('SYUSER.ID'))
  9. , db.Column('SYORGANIZATION_ID', db.String, db.ForeignKey('SYORGANIZATION.ID')))
  10. user_role_table = db.Table('SYUSER_SYROLE', db.Model.metadata
  11. , db.Column('SYUSER_ID', db.String, db.ForeignKey('SYUSER.ID'))
  12. , db.Column('SYROLE_ID', db.String, db.ForeignKey('SYROLE.ID')))
  13. class User(db.Model, UserMixin):
  14. __tablename__ = 'SYUSER'
  15. ID = db.Column(db.String(36), primary_key=True)
  16. CREATEDATETIME = db.Column(db.DateTime, index=True, default=datetime.now)
  17. UPDATEDATETIME = db.Column(db.DateTime, index=True, default=datetime.now)
  18. LOGINNAME = db.Column(db.String(100), unique=True, index=True)
  19. PWD = db.Column(db.String(100))
  20. NAME = db.Column(db.String(100))
  21. SEX = db.Column(db.String(1))
  22. AGE = db.Column(db.Integer)
  23. PHOTO = db.Column(db.String(200))
  24. EMPLOYDATE = db.Column(db.DATETIME, default=datetime.now)
  25. EMAIL = db.Column(db.String(50))
  26. PHONENUMBER = db.Column(db.String(11))
  27. STATUS = db.Column(db.String(10))
  28. organizations = db.relationship('Organization',
  29. secondary=user_organization_table,
  30. backref=db.backref('users', lazy='dynamic'),)
  31. roles = db.relationship('Role',
  32. secondary=user_role_table,
  33. backref=db.backref('users', lazy='dynamic'),
  34. lazy="dynamic")
  35. def get_id(self):
  36. return str(self.ID)
  37. def have_permission(self, url):
  38. permissions = []
  39. for role in self.roles:
  40. permissions.extend([resource for resource in role.resources])
  41. if filter(lambda x: x.URL == url, permissions):
  42. return True
  43. permissions = []
  44. for organization in self.organizations:
  45. permissions.extend([resource for resource in organization.resources])
  46. return filter(lambda x: x.NAME == url, permissions)
  47. def __repr__(self):
  48. return '<User %r>\n' %(self.NAME)
  49. def to_json(self):
  50. json = {
  51. 'userId': self.ID,
  52. 'createTime': self.CREATEDATETIME.strftime('%Y-%m-%d %H:%M:%S'),
  53. 'updateTime': self.UPDATEDATETIME.strftime('%Y-%m-%d %H:%M:%S'),
  54. 'userName': self.LOGINNAME,
  55. 'nickName': self.NAME,
  56. 'sex': self.SEX,
  57. 'age': self.AGE,
  58. "status": self.STATUS,
  59. 'photo': self.PHOTO,
  60. 'email': self.EMAIL,
  61. 'phonenumber': self.PHONENUMBER
  62. #'employdate': self.EMPLOYDATE.strftime('%Y-%m-%d %H:%M:%S'),
  63. }
  64. if len(self.organizations) > 0:
  65. json['dept'] = self.organizations[0].to_json()
  66. json['deptId'] = self.organizations[0].ID
  67. if len(self.roles.all()) > 0:
  68. json['roles'] = [role.to_json() for role in self.roles.all()]
  69. return json