diff --git a/wagtail/wagtailusers/forms.py b/wagtail/wagtailusers/forms.py
index 247d8ab62..928e3b40b 100644
--- a/wagtail/wagtailusers/forms.py
+++ b/wagtail/wagtailusers/forms.py
@@ -6,7 +6,7 @@ from django.contrib.auth.models import Group, Permission
from wagtail.wagtailadmin import hooks
from wagtail.wagtailusers.models import UserProfile
-from wagtail.wagtailcore.models import UserPagePermissionsProxy
+from wagtail.wagtailcore.models import UserPagePermissionsProxy, GroupPagePermission
User = get_user_model()
@@ -187,6 +187,18 @@ class GroupForm(forms.ModelForm):
return group
+class GroupPagePermissionForm(forms.ModelForm):
+ class Meta:
+ model = GroupPagePermission
+ fields = ('page', 'permission_type')
+
+
+class BaseGroupPagePermissionFormSet(forms.models.BaseInlineFormSet):
+ def __init__(self, *args, **kwargs):
+ super(BaseGroupPagePermissionFormSet, self).__init__(*args, **kwargs)
+ self.form = GroupPagePermissionForm
+
+
class NotificationPreferencesForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NotificationPreferencesForm, self).__init__(*args, **kwargs)
diff --git a/wagtail/wagtailusers/templates/wagtailusers/groups/edit.html b/wagtail/wagtailusers/templates/wagtailusers/groups/edit.html
index a98076296..d079f5e79 100644
--- a/wagtail/wagtailusers/templates/wagtailusers/groups/edit.html
+++ b/wagtail/wagtailusers/templates/wagtailusers/groups/edit.html
@@ -15,6 +15,7 @@
diff --git a/wagtail/wagtailusers/views/groups.py b/wagtail/wagtailusers/views/groups.py
index 07692adcf..8867aaed4 100644
--- a/wagtail/wagtailusers/views/groups.py
+++ b/wagtail/wagtailusers/views/groups.py
@@ -6,9 +6,11 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.contrib import messages
from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers
+from django.forms.models import inlineformset_factory
from wagtail.wagtailadmin.forms import SearchForm
-from wagtail.wagtailusers.forms import GroupForm
+from wagtail.wagtailusers.forms import GroupForm, BaseGroupPagePermissionFormSet
+from wagtail.wagtailcore.models import GroupPagePermission
from wagtail.wagtailcore.compat import AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME
User = get_user_model()
@@ -97,18 +99,28 @@ def create(request):
@permission_required(change_user_perm)
def edit(request, group_id):
group = get_object_or_404(Group, id=group_id)
+ GroupPagePermissionFormSet = inlineformset_factory(
+ Group,
+ GroupPagePermission,
+ formset=BaseGroupPagePermissionFormSet,
+ extra=0
+ )
if request.POST:
form = GroupForm(request.POST, instance=group)
- if form.is_valid():
+ formset = GroupPagePermissionFormSet(request.POST, instance=group)
+ if form.is_valid() and formset.is_valid():
group = form.save()
+ formset.save()
messages.success(request, _("Group '{0}' updated.").format(group))
return redirect('wagtailusers_groups_index')
else:
messages.error(request, _("The group could not be saved due to errors."))
else:
form = GroupForm(instance=group)
+ formset = GroupPagePermissionFormSet(instance=group)
return render(request, 'wagtailusers/groups/edit.html', {
'group': group,
'form': form,
+ 'formset': formset,
})