models.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. name = models.CharField(max_length=255)
  10. pickled_permissions = models.TextField(null=True, blank=True)
  11. def __unicode__(self):
  12. return unicode(_(self.name))
  13. @property
  14. def permissions(self):
  15. try:
  16. return self.permissions_cache
  17. except AttributeError:
  18. try:
  19. self.permissions_cache = pickle.loads(
  20. base64.decodestring(self.pickled_permissions))
  21. except Exception:
  22. self.permissions_cache = {}
  23. return self.permissions_cache
  24. @permissions.setter
  25. def permissions(self, permissions):
  26. self.permissions_cache = permissions
  27. self.pickled_permissions = base64.encodestring(
  28. pickle.dumps(permissions, pickle.HIGHEST_PROTOCOL))
  29. class ForumRole(models.Model):
  30. name = models.CharField(max_length=255)
  31. pickled_permissions = models.TextField(null=True, blank=True)
  32. def __unicode__(self):
  33. return unicode(_(self.name))
  34. @property
  35. def permissions(self):
  36. try:
  37. return self.permissions_cache
  38. except AttributeError:
  39. try:
  40. self.permissions_cache = pickle.loads(
  41. base64.decodestring(self.pickled_permissions))
  42. except Exception:
  43. self.permissions_cache = {}
  44. return self.permissions_cache
  45. @permissions.setter
  46. def permissions(self, permissions):
  47. self.permissions_cache = permissions
  48. self.pickled_permissions = base64.encodestring(
  49. pickle.dumps(permissions, pickle.HIGHEST_PROTOCOL))