models.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from django.db import models
  2. from django.utils.translation import ugettext as _
  3. from misago.admin import site
  4. import base64
  5. try:
  6. import cPickle as pickle
  7. except ImportError:
  8. import pickle
  9. class Role(models.Model):
  10. name = models.CharField(max_length=255)
  11. pickled_permissions = models.TextField(null=True, blank=True)
  12. def __unicode__(self):
  13. return unicode(_(self.name))
  14. @property
  15. def permissions(self):
  16. try:
  17. return self.permissions_cache
  18. except AttributeError:
  19. try:
  20. self.permissions_cache = pickle.loads(
  21. base64.decodestring(self.pickled_permissions))
  22. except Exception:
  23. self.permissions_cache = {}
  24. return self.permissions_cache
  25. @permissions.setter
  26. def permissions(self, permissions):
  27. self.permissions_cache = permissions
  28. self.pickled_permissions = base64.encodestring(
  29. pickle.dumps(permissions, pickle.HIGHEST_PROTOCOL))
  30. class ForumRole(models.Model):
  31. name = models.CharField(max_length=255)
  32. pickled_permissions = models.TextField(null=True, blank=True)
  33. def __unicode__(self):
  34. return unicode(_(self.name))
  35. @property
  36. def permissions(self):
  37. try:
  38. return self.permissions_cache
  39. except AttributeError:
  40. try:
  41. self.permissions_cache = pickle.loads(
  42. base64.decodestring(self.pickled_permissions))
  43. except Exception:
  44. self.permissions_cache = {}
  45. return self.permissions_cache
  46. @permissions.setter
  47. def permissions(self, permissions):
  48. self.permissions_cache = permissions
  49. self.pickled_permissions = base64.encodestring(
  50. pickle.dumps(permissions, pickle.HIGHEST_PROTOCOL))
  51. """register models in misago admin"""
  52. site.add_node(
  53. parent='misago:admin',
  54. after='misago:admin:users:accounts:index',
  55. namespace='misago:admin:permissions',
  56. link='misago:admin:permissions:users:index',
  57. name=_("Permissions"),
  58. icon='fa fa-adjust')
  59. site.add_node(
  60. parent='misago:admin:permissions',
  61. namespace='misago:admin:permissions:users',
  62. link='misago:admin:permissions:users:index',
  63. name=_("User Roles"),
  64. icon='fa fa-th-large')
  65. site.add_node(
  66. parent='misago:admin:permissions',
  67. namespace='misago:admin:permissions:forums',
  68. link='misago:admin:permissions:forums:index',
  69. name=_("Forum Roles"),
  70. icon='fa fa-list')