django_roles.models — Django roles 0.7 documentation

# Django roles 0.7 documentation

# Source code for django_roles.models

    # encoding='utf-8'
    # Translation https://stackoverflow.com/questions/2938692/
    # django-internationalization-for-admin-pages-translate-model-name-and-attribute

    from django.db import models
    try:
        from django.utils.translation import ugettex_lazy as _
    except:
        from django.utils.translation import gettext_lazy as _
    from django.contrib.auth.models import Group

    class ViewAccess(models.Model):
        """
        Implements security in views having a name.

        The view name is *view* attribute value. The security for view name is
        configured with next two attributes: type (type of security) and roles
        (only if type is By role).
        """

        PUBLIC = 'pu'
        AUTHORIZED = 'au'
        BY_ROLE = 'br'

        ACCESS_TYPES = (
            (PUBLIC, _('Public')),
            (AUTHORIZED, _('Authorized')),
            (BY_ROLE, _('By role'))
        )

        #: View's name to be secured. Value can be just a view name 'objects_a',
        #: with application name: 'app_name:index', or a nested configurations with
        #: namespaces: 'namespace_1:namespace_2:index'.
        view = models.CharField(max_length=255, unique=True, default=None,
                                help_text=_(u'View name to be secured: '
                                            u'<em>namespace:view_name</em>'),
                                verbose_name=_(u'View'))
        #: The type of access as defined by ACCESS_TYPES
        type = models.CharField(max_length=2, choices=ACCESS_TYPES, default=None,
                                help_text=_(u'Type of access for the view. '
                                            u'Select from available options.'),
                                verbose_name=_(u'Type'))
        #: One or more roles (:func:`django.contrib.auth.models.Group`) with access.
        #: This attributes can always be empty. If the type selected is *By role*
        #: and no roles are added to this attribute, then *checkviewaccess* will
        #: report an ERROR.
        roles = models.ManyToManyField(Group, help_text=
                                       _(u'Select the groups (roles) with view '
                                         u'access if access type = By role.'),
                                       related_name='view_access',
                                       verbose_name=_(u'Roles'),
                                       blank=True)

        class Meta:
            verbose_name = _('View access')
            verbose_name_plural = _('Views access')

        def __str__(self):
            return self.view

    class TemplateAccess(models.Model):
        """
        Implements content security.

        This model let administrator to add or remove Groups (roles) from *roles*
        attribute. In templates, users belonging to any added group will pass the
        check.
        """
        #: Template's flag, text label, to identify each template access object.
        #: Flag must be unique.
        flag = models.CharField(max_length=255, unique=True, default=None,
                                help_text=_(u'Unique between all applications.'
                                            u'Flag is used with template tag '
                                            u'check_role to restrict access in '
                                            u'templates.'),
                                verbose_name=_(u'Flag'))
        #: One or more roles (:func:`django.contrib.auth.models.Group`) with access.
        roles = models.ManyToManyField(Group, help_text=
                                       _(u'Select the groups (roles) with access '
                                         u'with check_role template tag and '
                                         u'flag.'),
                                       related_name='template_access',
                                       verbose_name=_(u'Roles'))

        class Meta:
            verbose_name = _('Template access')
            verbose_name_plural = _('Templates access')

        def __str__(self):
            return self.flag