Commit 78a1c925 authored by Hamza Dely's avatar Hamza Dely
Browse files

[comptes/views] Réécriture de AdherentViewSet.partial_update()

parent 627e305d
......@@ -684,42 +684,41 @@ class AdherentViewSet(viewsets.GenericViewSet):
Les données doivent :
- être envoyées via une requête PATCH
"""
fields = []
target_user = self.get_object()
if (target_user.id == request.user.id and request.user.has_perm("comptes.adherent_modifier", Acl.LIMITE)):
pass
elif request.user.has_perm("comptes.adherent_modifier", Acl.BASIQUE):
pass
else:
raise PermissionDenied
if request.user.has_perm("comptes.adherent_modifier", Acl.TOTAL):
# Toutes les données peuvent être modifiées
serializer = self.get_serializer(target_user, data=request.data, partial=True)
elif request.user.id == target_user.id:
fields = Adherent.CHAMPS_MODIFIABLES[Acl.TOTAL]
elif (request.user.has_perm("comptes.adherent_modifier", Acl.LIMITE)
and request.user.id == target_user.id):
# Toutes les données sont modifiables, sauf les remarques et
# l'indication du statut de membre actif
serializer = self.get_serializer(target_user, data=request.data, partial=True)
del serializer.fields['remarque']
del serializer.fields['is_staff']
fields = list(set(Adherent.CHAMPS_MODIFIABLES[Acl.TOTAL]) - {'remarque', 'is_staff'})
elif request.user.has_perm("comptes.adherent_modifier", Acl.ETENDU):
# Les informations personnelles de l'adhérent sont modifiables
serializer = self.get_serializer(target_user, data=request.data, partial=True)
allowed_fields = Adherent.CHAMPS_MODIFIABLES[Acl.ETENDU]
for field in dict(serializer.fields).keys():
if field not in allowed_fields:
del serializer.fields[field]
else:
fields = Adherent.CHAMPS_MODIFIABLES[Acl.ETENDU]
elif request.user.has_perm("comptes.adherent_modifier", Acl.BASIQUE):
# Seules les données basiques sont modifiables
serializer = self.get_serializer(target_user, data=request.data, partial=True)
allowed_fields = Adherent.CHAMPS_MODIFIABLES[Acl.BASIQUE]
for field in dict(serializer.fields).keys():
if field not in allowed_fields:
del serializer[field]
fields = Adherent.CHAMPS_MODIFIABLES[Acl.BASIQUE]
else:
return Response(
{'detail': 'Vous ne pouvez pas effectuer cette modification sur cet adhérent'},
status=status.HTTP_403_FORBIDDEN,
)
serializer = self.get_serializer(target_user, data=request.data, partial=True, fields=fields)
if serializer.is_valid():
serializer.save()
return Response({}, status=status.HTTP_204_NO_CONTENT)
return Response(
{'detail': "Modification effectuée avec succès"},
status=status.HTTP_204_NO_CONTENT,
)
else:
return Response(
serializer.errors,
status=status.HTTP_400_BAD_REQUEST,
)
def destroy(self, request, pk=None):
"""
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment