У меня есть Django Rest Framework API, в котором я разрешаю только зарегистрированным пользователям новые элементы POST. ViewSet выглядит следующим образом:
class APIAuthGroup(InAuthGroup):
"""
A permission to only allow WRITE/POST access if and only if a user is logged in,
and is a member of the SA role inside keycloak.
"""
allowed_group_names = [settings.KEYCLOAK_SA_WRITE_PERMISSION]
def has_permission(self, request, view):
return request.method in SAFE_METHODS \
or super(APIAuthGroup, self).has_permission(request, view)
class DevicesViewSet(DatapuntViewSetWritable):
"""
A view that will return the devices and makes it possible to post new ones
if the user is logged in
"""
queryset = Device.objects.all().order_by('id')
serializer_class = DeviceSerializer
serializer_detail_class = DeviceSerializer
http_method_names = ['post', 'list', 'get']
permission_classes = [APIAuthGroup]
И мой сериализатор:
class PersonSerializer(HALSerializer):
name = serializers.CharField(required=True, allow_blank=False, max_length=255)
email = serializers.EmailField()
organisation = serializers.CharField(required=False, allow_blank=True, max_length=250)
class Meta:
model = Person
fields = ('name', 'email', 'organisation')
class DeviceSerializer(HALSerializer):
long = serializers.SerializerMethodField()
lat = serializers.SerializerMethodField()
organisation = serializers.SerializerMethodField()
owner = PersonSerializer()
contact = PersonSerializer(required=False)
class Meta:
model = Device
fields = (
'_links',
'id',
'frequency',
'longitude',
'latitude',
'organisation',
'owner',
'contact'
)
def get_organisation(self, obj):
if obj.owner:
return obj.owner.organisation
return 'Onbekend'
Теперь я хочу, чтобы только owner
и contact
возвращались, если пользователь вошел в систему. и если вошедший в систему адрес электронной почты пользователя равен owner.email
.
, я не уверен, как и где я мог бы сделать это, хотя. Должен ли я сделать это в сериализаторе или в наборе? И как?
Все советы приветствуются!