rolemodel.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from django.db import models
  2. from django.utils.translation import ugettext as _
  3. import base64
  4. try:
  5. import cPickle as pickle
  6. except ImportError:
  7. import pickle
  8. class Role(models.Model):
  9. """
  10. Misago User Role model
  11. """
  12. name = models.CharField(max_length=255)
  13. token = models.CharField(max_length=255,null=True,blank=True)
  14. protected = models.BooleanField(default=False)
  15. _permissions = models.TextField(db_column = 'permissions', null=True, blank=True)
  16. permissions_cache = {}
  17. class Meta:
  18. app_label = 'misago'
  19. def __unicode__(self):
  20. return unicode(_(self.name))
  21. def is_special(self):
  22. return token
  23. @property
  24. def permissions(self):
  25. if self.permissions_cache:
  26. return self.permissions_cache
  27. try:
  28. self.permissions_cache = pickle.loads(base64.decodestring(self._permissions))
  29. except Exception:
  30. # ValueError, SuspiciousOperation, unpickling exceptions. If any of
  31. # these happen, just return an empty dictionary (an empty permissions list).
  32. self.permissions_cache = {}
  33. return self.permissions_cache
  34. @permissions.setter
  35. def permissions(self, permissions):
  36. self.permissions_cache = permissions
  37. self._permissions = base64.encodestring(pickle.dumps(permissions, pickle.HIGHEST_PROTOCOL))