66# See https://aboutcode.org for more information about AboutCode FOSS projects.
77#
88
9+
910from django .contrib .auth import get_user_model
1011from django .core .exceptions import ObjectDoesNotExist
1112
2021from rest_framework .decorators import action
2122from rest_framework .response import Response
2223
24+ from dje .api import DataspacedSlugRelatedField
25+
2326User = get_user_model ()
2427
2528
@@ -49,16 +52,11 @@ class ObjectPermissionSerializer(serializers.Serializer):
4952 """
5053 Generic serializer for representing or updating object-level permissions.
5154 Accepts:
52- - user: user ID
55+ - user: username
5356 - permissions: list of permission codenames
5457 """
5558
56- # TODO: Scope by dataspace, see DataspacedSlugRelatedField
57- user = serializers .SlugRelatedField (
58- queryset = User .objects .all (),
59- slug_field = "username" ,
60- )
61- # user = DataspacedSlugRelatedField(slug_field="username")
59+ user = DataspacedSlugRelatedField (queryset = User .objects .all (), slug_field = "username" )
6260 permissions = serializers .ListField (child = serializers .CharField (), allow_empty = False )
6361
6462 class Meta :
@@ -101,12 +99,11 @@ def manage_permissions(self, request, *args, **kwargs):
10199 Manage object-level permissions for this object.
102100
103101 - GET: List users and their permissions.
104- - POST: Assign permissions to a user. Provide `user` ID and `permissions` list.
105- - DELETE: Remove permissions from a user. Provide `user` ID and `permissions`
106- list.
102+ - POST: Assign permissions to a user. Provide `user` and `permissions` list.
103+ - DELETE: Remove permissions from a user. Provide `user` and `permissions` list.
107104 """
108105 obj = self .get_object ()
109- serializer_context = {"object" : obj }
106+ serializer_context = {** self . get_serializer_context (), "object" : obj }
110107
111108 if request .method == "GET" :
112109 users_with_perms = get_users_with_perms (obj , attach_perms = True )
@@ -128,8 +125,8 @@ def manage_permissions(self, request, *args, **kwargs):
128125 for perm in perms :
129126 try :
130127 assign_perm (perm , user , obj )
131- except ObjectDoesNotExist as e :
132- errors .append (f"Cannot assign permission '{ perm } ': { str ( e ) } " )
128+ except ObjectDoesNotExist :
129+ errors .append (f"Cannot assign permission '{ perm } ' due to an internal error. " )
133130
134131 if errors :
135132 return Response ({"errors" : errors }, status = status .HTTP_400_BAD_REQUEST )
@@ -141,8 +138,8 @@ def manage_permissions(self, request, *args, **kwargs):
141138 for perm in perms :
142139 try :
143140 remove_perm (perm , user , obj )
144- except ObjectDoesNotExist as e :
145- errors .append (f"Cannot remove permission '{ perm } ': { str ( e ) } " )
141+ except ObjectDoesNotExist :
142+ errors .append (f"Cannot assign permission '{ perm } ' due to an internal error. " )
146143
147144 if errors :
148145 return Response ({"errors" : errors }, status = status .HTTP_400_BAD_REQUEST )
0 commit comments