grant access by access permission groups

This commit is contained in:
Laura Klünder 2017-12-20 21:28:48 +01:00
parent 385aebe445
commit 76e970347a

View file

@ -8,6 +8,7 @@ from itertools import chain
import pytz import pytz
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db.models import Prefetch
from django.forms import ChoiceField, Form, ModelForm from django.forms import ChoiceField, Form, ModelForm
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -47,18 +48,42 @@ class AccessPermissionForm(Form):
access_restriction.pk: access_restriction access_restriction.pk: access_restriction
for access_restriction in access_restrictions for access_restriction in access_restrictions
} }
access_restrictions_ids = set(self.access_restrictions.keys())
self.access_restriction_choices = { self.access_restriction_choices = {
'all': self.access_restrictions.values(), 'all': self.access_restrictions.values(),
**{str(pk): (access_restriction, ) for pk, access_restriction in self.access_restrictions.items()} **{str(pk): (access_restriction, ) for pk, access_restriction in self.access_restrictions.items()}
} }
# get access permission groups
groups = AccessRestrictionGroup.qs_for_request(request).prefetch_related(
Prefetch('accessrestrictions', AccessRestriction.objects.only('pk'))
)
group_contents = {
group.pk: set(r.pk for r in group.accessrestrictions.all())
for group in groups
}
group_contents = {
pk: restrictions for pk, restrictions in group_contents.items()
if not (restrictions - access_restrictions_ids)
}
self.access_restriction_choices.update({
('g%d' % pk): tuple(
self.access_restrictions[restriction] for restriction in restrictions
) for pk, restrictions in group_contents.items()
})
# construct choice field for access permissions # construct choice field for access permissions
choices = [('', _('choose permissions…')), choices = [('', _('choose permissions…')),
('all', ungettext_lazy('everything possible (%d permission)', ('all', ungettext_lazy('everything possible (%d permission)',
'everything possible (%d permissions)', 'everything possible (%d permissions)',
len(access_restrictions)) % len(access_restrictions))] len(access_restrictions)) % len(access_restrictions))]
choices.append((_('Access Permission Groups'), tuple(
('g%d' % group.pk, group.title)
for group in groups
)))
choices.append((_('Access Permissions'), tuple( choices.append((_('Access Permissions'), tuple(
(str(pk), access_restriction.title) (str(pk), access_restriction.title)
for pk, access_restriction in self.access_restrictions.items() for pk, access_restriction in self.access_restrictions.items()