models.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from django.db import models
  2. from misago.core import serializer
  3. from misago.acl import version as acl_version
  4. class BaseRole(models.Model):
  5. name = models.CharField(max_length=255)
  6. special_role = models.CharField(max_length=255, null=True, blank=True)
  7. pickled_permissions = models.TextField(null=True, blank=True)
  8. class Meta:
  9. abstract = True
  10. def __unicode__(self):
  11. return self.name
  12. def save(self, *args, **kwargs):
  13. if self.pk:
  14. acl_version.invalidate()
  15. return super(BaseRole, self).save(*args, **kwargs)
  16. def delete(self, *args, **kwargs):
  17. acl_version.invalidate()
  18. return super(BaseRole, self).delete(*args, **kwargs)
  19. @property
  20. def permissions(self):
  21. try:
  22. return self.permissions_cache
  23. except AttributeError:
  24. try:
  25. self.permissions_cache = serializer.loads(
  26. self.pickled_permissions)
  27. except Exception:
  28. self.permissions_cache = {}
  29. return self.permissions_cache
  30. @permissions.setter
  31. def permissions(self, permissions):
  32. self.permissions_cache = permissions
  33. self.pickled_permissions = serializer.dumps(permissions)
  34. class Role(BaseRole):
  35. pass