Completed
Pull Request — master (#16)
by
unknown
53s
created

GroupMemberValueViewSet.get_queryset()   A

Complexity

Conditions 3

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 3
dl 0
loc 10
rs 9.4285
1
from django.http import Http404, HttpResponseForbidden
2
from django.core.exceptions import ValidationError
3
4
from rest_framework import viewsets, decorators, status, mixins
5
from rest_framework.response import Response
6
from rest_framework.permissions import IsAuthenticated
7
from dry_rest_permissions.generics import DRYPermissions
8
9
from sigma_core.models.group_field import GroupField
10
from sigma_core.models.group_member_value import GroupMemberValue
11
from sigma_core.serializers.group_member_value import GroupMemberValueSerializer
12
13
class GroupMemberValueViewSet(mixins.CreateModelMixin,    # TODO
14
                   mixins.RetrieveModelMixin,       # TODO
15
                   mixins.UpdateModelMixin,         # TODO
16
                   mixins.DestroyModelMixin,        # TODO
17
                   mixins.ListModelMixin,           # TODO
18
                   viewsets.GenericViewSet):
19
    queryset = GroupMemberValue.objects.all()
20
    serializer_class = GroupMemberValueSerializer
21
    permission_classes = [IsAuthenticated, DRYPermissions, ]
22
    filter_fields = ('name', )
23
24
    # You will never see fields for groups you are not a member of
25
    def get_queryset(self):
26
        from sigma_core.models.group_member import GroupMember
27
        if not self.request.user.is_authenticated():
28
            return self.queryset.none()
29
        if self.request.user.is_sigma_admin():
30
            return self.queryset
31
        # @sqlperf: Find which one is the most efficient
32
        my_groups = GroupMember.objects.filter(user=self.request.user.id).values_list('pk', flat=True)
33
        #my_groups = GroupMember.objects.filter(user=self.request.user.id)
34
        return self.queryset.filter(membership__in=my_groups)
35
36
37
    def create(self, request):
38
        serializer = GroupMemberValueSerializer(data=request.data)
39
        if not serializer.is_valid():
40
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
41
        mship = serializer.validated_data.get('membership')
42
        if mship.user != request.user:
43
            return Response(status=status.HTTP_400_BAD_REQUEST)
44
45
        serializer.save()
46
        return Response(serializer.data, status=status.HTTP_201_CREATED)
47