From 1c9d8b1c7e72a15e6186aa6d95a30e4ba3fbfac4 Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 28 May 2024 15:05:27 +0930 Subject: [PATCH] fix(api): add teams and permissions to org and teams respectively !13 --- app/api/serializers/access.py | 44 ++++++++++++++++++++++++++++++++--- app/api/views/access.py | 1 + app/api/views/index.py | 4 ++-- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/app/api/serializers/access.py b/app/api/serializers/access.py index a32834ca..287dd135 100644 --- a/app/api/serializers/access.py +++ b/app/api/serializers/access.py @@ -1,15 +1,48 @@ -from rest_framework import serializers +from rest_framework import serializers, request +from rest_framework.reverse import reverse from access.models import Organization, Team +from django.contrib.auth.models import Permission -class TeamSerializer(serializers.ModelSerializer): + + +class TeamSerializerBase(serializers.ModelSerializer): + + view_name="_api_team" + + url = serializers.SerializerMethodField('get_url') class Meta: model = Team fields = ( - "group_ptr_id", + "id", "name", + 'organization', + 'url', + ) + + + def get_url(self, obj): + + request = self.context.get('request') + + return request.build_absolute_uri(reverse(self.view_name, args=[obj.organization.id,obj.pk])) + + + +class TeamSerializer(TeamSerializerBase): + + + class Meta: + model = Team + depth = 1 + fields = ( + "id", + "name", + 'organization', + 'permissions', + 'url', ) @@ -20,11 +53,16 @@ class OrganizationSerializer(serializers.ModelSerializer): view_name="_api_organization", format="html" ) + teams = TeamSerializerBase(source='team_set', many=True, read_only=False) + + view_name="_api_organization" + class Meta: model = Organization fields = ( "id", "name", + 'teams', 'url', ) diff --git a/app/api/views/access.py b/app/api/views/access.py index d954f24c..dbfcc4ee 100644 --- a/app/api/views/access.py +++ b/app/api/views/access.py @@ -21,6 +21,7 @@ class OrganizationList(generics.ListCreateAPIView): class OrganizationDetail(generics.RetrieveUpdateDestroyAPIView): permission_required = 'access.view_organization' queryset = Organization.objects.all() + lookup_field = 'pk' serializer_class = OrganizationSerializer diff --git a/app/api/views/index.py b/app/api/views/index.py index 46c4faf9..1e5c5034 100644 --- a/app/api/views/index.py +++ b/app/api/views/index.py @@ -27,9 +27,9 @@ class IndexView(routers.APIRootView): def get(self, request, *args, **kwargs): return Response( { - "organizations": reverse("_api_orgs", request=request), - "teams": reverse("_api_teams", request=request), + # "teams": reverse("_api_teams", request=request), "devices": reverse("_api_devices", request=request), + "organizations": reverse("_api_orgs", request=request), "software": reverse("_api_softwares", request=request), } )