models.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import datetime
  2. from flask import g
  3. from mongoengine import (
  4. BooleanField,
  5. DateTimeField,
  6. Document,
  7. IntField,
  8. ListField,
  9. ReferenceField,
  10. StringField,
  11. )
  12. from ..._compat import as_unicode
  13. def get_user_id():
  14. try:
  15. return g.user.id
  16. except Exception:
  17. return None
  18. class Permission(Document):
  19. name = StringField(max_length=100, required=True, unique=True)
  20. def __unicode__(self):
  21. return self.name
  22. class ViewMenu(Document):
  23. name = StringField(max_length=100, required=True, unique=True)
  24. def __eq__(self, other):
  25. return (isinstance(other, self.__class__)) and (self.name == other.name)
  26. def __neq__(self, other):
  27. return self.name != other.name
  28. def __unicode__(self):
  29. return self.name
  30. class PermissionView(Document):
  31. permission = ReferenceField(Permission)
  32. view_menu = ReferenceField(ViewMenu)
  33. def __unicode__(self):
  34. return str(self.permission).replace("_", " ") + " on " + str(self.view_menu)
  35. def __repr__(self):
  36. return str(self.permission).replace("_", " ") + " on " + str(self.view_menu)
  37. class Role(Document):
  38. meta = {
  39. "allow_inheritance": True
  40. } # Added for role extension via mongoengine Document inheritance
  41. name = StringField(max_length=64, required=True, unique=True)
  42. permissions = ListField(ReferenceField(PermissionView))
  43. def __unicode__(self):
  44. return self.name
  45. def __repr__(self):
  46. return self.name
  47. class User(Document):
  48. meta = {
  49. "allow_inheritance": True
  50. } # Added for user extension via Mongoengine Document inheritance
  51. first_name = StringField(max_length=64, required=True)
  52. last_name = StringField(max_length=64, required=True)
  53. username = StringField(max_length=64, required=True, unique=True)
  54. password = StringField(max_length=256)
  55. active = BooleanField()
  56. email = StringField(max_length=320, required=True, unique=True)
  57. last_login = DateTimeField()
  58. login_count = IntField()
  59. fail_login_count = IntField()
  60. roles = ListField(ReferenceField(Role))
  61. created_on = DateTimeField(default=datetime.datetime.now)
  62. changed_on = DateTimeField(default=datetime.datetime.now)
  63. created_by = ReferenceField("self", default=get_user_id())
  64. changed_by = ReferenceField("self", default=get_user_id())
  65. @property
  66. def is_authenticated(self):
  67. return True
  68. @property
  69. def is_active(self):
  70. return self.active
  71. @property
  72. def is_anonymous(self):
  73. return False
  74. def get_id(self):
  75. return as_unicode(self.id)
  76. def get_full_name(self):
  77. return "{0} {1}".format(self.first_name, self.last_name)
  78. def __unicode__(self):
  79. return self.get_full_name()
  80. class RegisterUser(Document):
  81. first_name = StringField(max_length=64, required=True)
  82. last_name = StringField(max_length=64, required=True)
  83. username = StringField(max_length=64, required=True, unique=True)
  84. password = StringField(max_length=256)
  85. email = StringField(max_length=64, required=True)
  86. registration_date = DateTimeField(default=datetime.datetime.now)
  87. registration_hash = StringField(max_length=256)