grant access by access permission groups
This commit is contained in:
parent
385aebe445
commit
76e970347a
1 changed files with 25 additions and 0 deletions
|
@ -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()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue