models.py 949 B

123456789101112131415161718192021222324252627282930313233343536
  1. # pylint: disable=attribute-defined-outside-init,pointless-string-statement
  2. from django.contrib.postgres.fields import JSONField
  3. from django.db import models
  4. from django.utils.encoding import python_2_unicode_compatible
  5. from . import version as acl_version
  6. def permissions_default():
  7. return {}
  8. @python_2_unicode_compatible
  9. class BaseRole(models.Model):
  10. name = models.CharField(max_length=255)
  11. special_role = models.CharField(max_length=255, null=True, blank=True)
  12. permissions = JSONField(default=permissions_default)
  13. class Meta:
  14. abstract = True
  15. def __str__(self):
  16. return self.name
  17. def save(self, *args, **kwargs):
  18. if self.pk:
  19. acl_version.invalidate()
  20. return super(BaseRole, self).save(*args, **kwargs)
  21. def delete(self, *args, **kwargs):
  22. acl_version.invalidate()
  23. return super(BaseRole, self).delete(*args, **kwargs)
  24. class Role(BaseRole):
  25. pass