From 200c07d020aad6fb9b094fb4d97e376edae4c760 Mon Sep 17 00:00:00 2001 From: Steven Bal Date: Thu, 19 Dec 2019 09:54:54 +0100 Subject: [PATCH] Show only custom permissions as available in guardian admin for API --- src/vng/servervalidation/admin.py | 9 +++++++++ src/vng/servervalidation/forms.py | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/vng/servervalidation/admin.py b/src/vng/servervalidation/admin.py index 262ec059..959e3296 100644 --- a/src/vng/servervalidation/admin.py +++ b/src/vng/servervalidation/admin.py @@ -8,6 +8,8 @@ from vng.testsession.models import SessionType +from .forms import CustomAdminUserObjectPermissionsForm, CustomAdminGroupObjectPermissionsForm + def get_all_fields(mo): l = [field.name for field in mo._meta.fields] l.remove('id') @@ -67,6 +69,13 @@ def get_obj_perms_base_context(self, request, obj): context["model_perms"] = context["model_perms"].filter(codename__in=permission_codes) return context + def get_obj_perms_manage_group_form(self, request): + return CustomAdminGroupObjectPermissionsForm + + def get_obj_perms_manage_user_form(self, request): + return CustomAdminGroupObjectPermissionsForm + + @admin.register(model.PostmanTest) class PostmanTestAdmin(AdminChangeLinksMixin, OrderedModelAdmin): list_display = ['name', 'version', 'test_scenario', 'move_up_down_links', diff --git a/src/vng/servervalidation/forms.py b/src/vng/servervalidation/forms.py index 99ba13fc..216196d5 100644 --- a/src/vng/servervalidation/forms.py +++ b/src/vng/servervalidation/forms.py @@ -7,6 +7,7 @@ from filer.models.filemodels import File from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ +from guardian.admin import AdminUserObjectPermissionsForm, AdminGroupObjectPermissionsForm from django.forms.models import inlineformset_factory from tinymce.widgets import TinyMCE @@ -211,3 +212,22 @@ class EnvironmentUpdateForm(forms.ModelForm): class Meta: model = Environment fields = ['name'] + + +class CustomPermissionChoicesMixin: + def get_obj_perms_field_choices(self): + """ + Show only the custom permissions as the available object permissions + """ + choices = super().get_obj_perms_field_choices() + permission_codes = [code for code, _ in self.obj._meta.permissions] + choices = [(perm, label) for perm, label in choices if perm in permission_codes] + return choices + + +class CustomAdminUserObjectPermissionsForm(CustomPermissionChoicesMixin, AdminUserObjectPermissionsForm): + pass + + +class CustomAdminGroupObjectPermissionsForm(CustomPermissionChoicesMixin, AdminGroupObjectPermissionsForm): + pass