From 987414ed7b2d6d2dea0dadb3900699543a4293e1 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 8 Jun 2020 15:40:41 -0400 Subject: [PATCH] Introduce NestedObjectPermissionSerializer --- netbox/users/api/nested_serializers.py | 32 +++++++++++++++++++++----- netbox/users/api/serializers.py | 1 + netbox/users/tests/test_api.py | 5 +--- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/netbox/users/api/nested_serializers.py b/netbox/users/api/nested_serializers.py index f7721cf94..f6e5cefbf 100644 --- a/netbox/users/api/nested_serializers.py +++ b/netbox/users/api/nested_serializers.py @@ -1,16 +1,17 @@ from django.contrib.auth.models import Group, User +from django.contrib.contenttypes.models import ContentType +from rest_framework import serializers -from utilities.api import WritableNestedSerializer +from users.models import ObjectPermission +from utilities.api import ContentTypeField, WritableNestedSerializer -_all_ = [ +__all__ = [ + 'NestedGroupSerializer', + 'NestedObjectPermissionSerializer', 'NestedUserSerializer', ] -# -# Groups and users -# - class NestedGroupSerializer(WritableNestedSerializer): class Meta: @@ -23,3 +24,22 @@ class NestedUserSerializer(WritableNestedSerializer): class Meta: model = User fields = ['id', 'username'] + + +class NestedObjectPermissionSerializer(WritableNestedSerializer): + object_types = ContentTypeField( + queryset=ContentType.objects.all(), + many=True + ) + groups = serializers.SerializerMethodField(read_only=True) + users = serializers.SerializerMethodField(read_only=True) + + class Meta: + model = ObjectPermission + fields = ['id', 'object_types', 'groups', 'users', 'actions'] + + def get_groups(self, obj): + return [g.name for g in obj.groups.all()] + + def get_users(self, obj): + return [u.username for u in obj.users.all()] diff --git a/netbox/users/api/serializers.py b/netbox/users/api/serializers.py index dc5301846..052567e47 100644 --- a/netbox/users/api/serializers.py +++ b/netbox/users/api/serializers.py @@ -1,3 +1,4 @@ +from django.contrib.auth.models import Group, User from django.contrib.contenttypes.models import ContentType from users.models import ObjectPermission diff --git a/netbox/users/tests/test_api.py b/netbox/users/tests/test_api.py index 2494c8f31..166473710 100644 --- a/netbox/users/tests/test_api.py +++ b/netbox/users/tests/test_api.py @@ -18,10 +18,7 @@ class AppTest(APITestCase): class ObjectPermissionTest(APIViewTestCases.APIViewTestCase): model = ObjectPermission - brief_fields = [] - - # TODO: Add a nested serializer for ObjectPermission - test_list_objects_brief = None + brief_fields = ['actions', 'groups', 'id', 'object_types', 'users'] @classmethod def setUpTestData(cls):