538_API_share_with_ids #539

Merged
mpeltriaux merged 2 commits from 538_API_share_with_ids into master 2026-05-14 13:04:59 +00:00
Showing only changes of commit 056a92b068 - Show all commits

View File

@@ -309,22 +309,36 @@ class AbstractModelShareAPIView(AbstractAPIView):
raise ValueError("Shared user list must not be empty!")
new_teams = content.get("teams", [])
self.__process_user_sharing(new_users, obj)
self.__process_team_sharing(new_teams, obj)
return True
def __process_user_sharing(self, user_list: list, obj):
""" Processes API sharing for user payload
Args:
user_list (list): A list of users to share the obj with
obj (BaseObject): The shareable object
Returns:
"""
# Eliminate duplicates
new_users = list(dict.fromkeys(new_users))
new_teams = list(dict.fromkeys(new_teams))
new_users = list(dict.fromkeys(user_list))
# Make sure each of these names exist as a user
new_users_objs = []
for user in new_users:
new_users_objs.append(User.objects.get(username=user))
# Make sure each of these names exist as a user
new_teams_objs = []
for team_name in new_teams:
new_teams_objs.append(Team.objects.get(name=team_name))
try:
user_obj = User.objects.get(username=user)
except User.DoesNotExist:
raise AssertionError(f"User with username {user} does not exist")
new_users_objs.append(user_obj)
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_users_to_be_added = User.objects.filter(
username__in=new_users
).exclude(
@@ -332,6 +346,33 @@ class AbstractModelShareAPIView(AbstractAPIView):
)
new_users_objs = obj.shared_users.union(new_users_to_be_added)
obj.share_with_user_list(new_users_objs)
def __process_team_sharing(self, team_list: list, obj):
""" Processes API sharing for team payload
Args:
team_list (list): A list of teams to share the obj with
obj (BaseObject): The shareable object
Returns:
"""
# 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:
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)
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(
@@ -339,10 +380,7 @@ class AbstractModelShareAPIView(AbstractAPIView):
)
new_teams_objs = obj.shared_teams.union(new_teams_to_be_added)
obj.share_with_user_list(new_users_objs)
obj.share_with_team_list(new_teams_objs)
return True
class InterventionAPIShareView(AbstractModelShareAPIView):
model = Intervention