cms.models.permissionmodels: 63 total statements, 0.0% covered

Generated: Wed 2013-03-13 10:33 CET

Source file: /media/Envs/Envs/filer-gallery/lib/python2.7/site-packages/cms/models/permissionmodels.py

Stats: 0 executed, 51 missed, 12 excluded, 43 ignored

  1. # -*- coding: utf-8 -*-
  2. from django.db import models
  3. from django.utils.translation import ugettext_lazy as _
  4. from django.contrib.auth.models import User, Group
  5. from django.contrib.sites.models import Site
  6. from cms.models import Page, ACCESS_CHOICES, ACCESS_PAGE_AND_DESCENDANTS
  7. from cms.models.managers import BasicPagePermissionManager, PagePermissionManager
  8. from cms.utils.helpers import reversion_register
  9. class AbstractPagePermission(models.Model):
  10. """Abstract page permissions
  11. """
  12. # who:
  13. user = models.ForeignKey(User, verbose_name=_("user"), blank=True, null=True)
  14. group = models.ForeignKey(Group, verbose_name=_("group"), blank=True, null=True)
  15. # what:
  16. can_change = models.BooleanField(_("can edit"), default=True)
  17. can_add = models.BooleanField(_("can add"), default=True)
  18. can_delete = models.BooleanField(_("can delete"), default=True)
  19. can_change_advanced_settings = models.BooleanField(_("can change advanced settings"), default=False)
  20. can_publish = models.BooleanField(_("can publish"), default=True)
  21. can_change_permissions = models.BooleanField(_("can change permissions"), default=False, help_text=_("on page level"))
  22. can_move_page = models.BooleanField(_("can move"), default=True)
  23. can_moderate = models.BooleanField(_("can moderate"), default=True)
  24. can_view = models.BooleanField(_("view restricted"), default=False, help_text=_("frontend view restriction"))
  25. class Meta:
  26. abstract = True
  27. app_label = 'cms'
  28. @property
  29. def audience(self):
  30. """Return audience by priority, so: All or User, Group
  31. """
  32. targets = filter(lambda item: item, (self.user, self.group,))
  33. return ", ".join([unicode(t) for t in targets]) or 'No one'
  34. def save(self, *args, **kwargs):
  35. if not self.user and not self.group:
  36. # don't allow `empty` objects
  37. return
  38. return super(AbstractPagePermission, self).save(*args, **kwargs)
  39. class GlobalPagePermission(AbstractPagePermission):
  40. """Permissions for all pages (global).
  41. """
  42. can_recover_page = models.BooleanField(_("can recover pages"), default=True, help_text=_("can recover any deleted page"))
  43. sites = models.ManyToManyField(Site, null=True, blank=True, help_text=_('If none selected, user haves granted permissions to all sites.'), verbose_name=_('sites'))
  44. objects = BasicPagePermissionManager()
  45. class Meta:
  46. verbose_name = _('Page global permission')
  47. verbose_name_plural = _('Pages global permissions')
  48. app_label = 'cms'
  49. def __unicode__(self):
  50. return "%s :: GLOBAL" % self.audience
  51. class PagePermission(AbstractPagePermission):
  52. """Page permissions for single page
  53. """
  54. grant_on = models.IntegerField(_("Grant on"), choices=ACCESS_CHOICES, default=ACCESS_PAGE_AND_DESCENDANTS)
  55. page = models.ForeignKey(Page, null=True, blank=True, verbose_name=_("page"))
  56. objects = PagePermissionManager()
  57. class Meta:
  58. verbose_name = _('Page permission')
  59. verbose_name_plural = _('Page permissions')
  60. app_label = 'cms'
  61. def __unicode__(self):
  62. page = self.page_id and unicode(self.page) or "None"
  63. return "%s :: %s has: %s" % (page, self.audience, unicode(dict(ACCESS_CHOICES)[self.grant_on]))
  64. class PageUser(User):
  65. """Cms specific user data, required for permission system
  66. """
  67. created_by = models.ForeignKey(User, related_name="created_users")
  68. class Meta:
  69. verbose_name = _('User (page)')
  70. verbose_name_plural = _('Users (page)')
  71. app_label = 'cms'
  72. class PageUserGroup(Group):
  73. """Cms specific group data, required for permission system
  74. """
  75. created_by = models.ForeignKey(User, related_name="created_usergroups")
  76. class Meta:
  77. verbose_name = _('User group (page)')
  78. verbose_name_plural = _('User groups (page)')
  79. app_label = 'cms'
  80. reversion_register(PagePermission)