X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fcore%2Fxoslib%2Fmethods%2Fsliceplus.py;h=0a8852ab5c5e2c37af8eae9a177b04dc2a846b22;hb=0093647259a08b6a8ac35bab421a2a4d3a194f19;hp=c48d036b82c8a25586f84e15e2887e92c9a3ca7f;hpb=e0c6f8f9a7a7cb80d7c19893aac01603409c40e5;p=plstackapi.git diff --git a/planetstack/core/xoslib/methods/sliceplus.py b/planetstack/core/xoslib/methods/sliceplus.py index c48d036..0a8852a 100644 --- a/planetstack/core/xoslib/methods/sliceplus.py +++ b/planetstack/core/xoslib/methods/sliceplus.py @@ -43,7 +43,17 @@ class SlicePlusIdSerializer(serializers.ModelSerializer, PlusSerializerMixin): humanReadableName = serializers.SerializerMethodField("getHumanReadableName") network_ports = NetworkPortsField(required=False) site_allocation = DictionaryField(required=False) + site_ready = DictionaryField(required=False) users = ListField(required=False) + user_names = ListField(required=False) # readonly = True ? + current_user_can_see = serializers.SerializerMethodField("getCurrentUserCanSee") + + def getCurrentUserCanSee(self, slice): + # user can 'see' the slice if he is the creator or he has a role + current_user = self.context['request'].user + if (slice.creator and slice.creator==current_user): + return True; + return (len(slice.getSliceInfo(current_user)["roles"]) > 0) def getSliceInfo(self, slice): return slice.getSliceInfo(user=self.context['request'].user) @@ -57,9 +67,9 @@ class SlicePlusIdSerializer(serializers.ModelSerializer, PlusSerializerMixin): model = SlicePlus fields = ('humanReadableName', 'id','created','updated','enacted','name','enabled','omf_friendly','description','slice_url','site','max_slivers','service','network','mount_data_sets', 'default_image', 'default_flavor', - 'serviceClass','creator','networks','sliceInfo','network_ports','backendIcon','backendHtml','site_allocation','users') + 'serviceClass','creator','networks','sliceInfo','network_ports','backendIcon','backendHtml','site_allocation','site_ready','users',"user_names","current_user_can_see") -class SlicePlusList(PlusListCreateAPIView): #generics.ListCreateAPIView): +class SlicePlusList(PlusListCreateAPIView): queryset = SlicePlus.objects.select_related().all() serializer_class = SlicePlusIdSerializer @@ -67,7 +77,22 @@ class SlicePlusList(PlusListCreateAPIView): #generics.ListCreateAPIView): method_name = "slicesplus" def get_queryset(self): - return SlicePlus.select_by_user(self.request.user) + current_user_can_see = self.request.QUERY_PARAMS.get('current_user_can_see', False) + + slices = SlicePlus.select_by_user(self.request.user) + + # If current_user_can_see is set, then filter the queryset to return + # only those slices that the user is either creator or has privilege + # on. + if (current_user_can_see): + slice_ids = [] + for slice in slices: + if (self.request.user == slice.creator) or (len(slice.getSliceInfo(self.request.user)["roles"]) > 0): + slice_ids.append(slice.id) + + slices = SlicePlus.objects.filter(id__in=slice_ids) + + return slices class SlicePlusDetail(PlusRetrieveUpdateDestroyAPIView): queryset = SlicePlus.objects.select_related().all()