# API team ID based sharing

* extents api sharing via team name with team id, so that both ways are supported now
* updates tests
This commit is contained in:
2026-05-14 15:04:24 +02:00
parent 056a92b068
commit 59a1bdfb1c
4 changed files with 63 additions and 33 deletions

View File

@@ -6,13 +6,14 @@ Created on: 21.01.22
"""
import json
import uuid
from django.db.models import QuerySet
from django.db.models import QuerySet, Q
from django.http import JsonResponse, HttpRequest
from django.views import View
from django.views.decorators.csrf import csrf_exempt
from api.models import APIUserToken
from api.models import APIUserToken, ExternalIdentifier
from api.settings import KSP_TOKEN_HEADER_IDENTIFIER, KSP_USER_HEADER_IDENTIFIER
from compensation.models import EcoAccount
from ema.models import Ema
@@ -205,6 +206,10 @@ class AbstractModelShareAPIView(AbstractAPIView):
"""
try:
external_identifier = ExternalIdentifier.resolve_external_identifier(id)
if external_identifier:
id = external_identifier.internal_id
users = self._get_shared_users_of_object(id)
teams = self._get_shared_teams_of_object(id)
except Exception as e:
@@ -237,6 +242,9 @@ class AbstractModelShareAPIView(AbstractAPIView):
"""
try:
external_identifier = ExternalIdentifier.resolve_external_identifier(id)
if external_identifier:
id = external_identifier.internal_id
success = self._process_put_body(request.body, id)
except Exception as e:
return self._return_error_response(e)
@@ -361,26 +369,29 @@ class AbstractModelShareAPIView(AbstractAPIView):
# Eliminate duplicates
new_teams = list(dict.fromkeys(team_list))
# Make sure each of these names exist as a team
new_teams_objs = []
for team_name in new_teams:
# Resolve team names or ids into objects
new_team_ids = []
for team in new_teams:
try:
team_obj = Team.objects.get(name=team_name)
except Team.DoesNotExist:
raise AssertionError(f"Team {team_name} does not exist!")
new_teams_objs.append(team_obj)
uuid.UUID(team)
try:
new_team_ids.append(Team.objects.get(id=team).id)
except Team.DoesNotExist:
raise AssertionError(f"Team with id {team} does not exist!")
except ValueError:
# entry is a name and not a uuid -> try to resolve as name!
try:
new_team_ids.append(Team.objects.get(name=team).id)
except Team.DoesNotExist:
raise AssertionError(f"Team with name {team} does not exist!")
new_team_objs = Team.objects.filter(id__in=new_team_ids)
if self.user.is_default_group_only():
# Default only users are not allowed to remove other users from having access. They can only add new ones!
# So we need to keep the ones that already have access from being removed!
new_teams_to_be_added = Team.objects.filter(
name__in=new_teams
).exclude(
id__in=obj.shared_teams
)
new_teams_objs = obj.shared_teams.union(new_teams_to_be_added)
new_team_objs = obj.shared_teams.union(new_team_objs)
obj.share_with_team_list(new_teams_objs)
obj.share_with_team_list(new_team_objs)
class InterventionAPIShareView(AbstractModelShareAPIView):
model = Intervention