Этот вопрос закрыт для ответов, так как повторяет вопрос Как заблокировать доступ к API?
@Romanuss

Как заблокировать доступ к определённым методам API?

Здравтвуйте, имеется задача заблокировать доступ к некоторым методам ViewSet.

lass PlaceViewSet(NestedViewSetMixin, viewsets.ModelViewSet):
    serializer_class = PlaceSerializer
    model = Place
    http_method_names = ['get', 'post', 'delete']
    pagination_class = LimitOffsetPagination
   permission_classes = (IsBuisnessUser, IsAuthenticated,)

    def get_queryset(self):
        queryset = Place.objects.all()

        place_id = self.request.query_params.get('id')
        place_type = self.request.query_params.get('type')
        name = self.request.query_params.get('name')
        subtypes = self.request.query_params.get('subtype')
        min_lat = self.request.query_params.get('min_lat')
        max_lat = self.request.query_params.get('max_lat')
        min_lon = self.request.query_params.get('min_lon')
        max_lon = self.request.query_params.get('max_lon')

        if place_id:
            queryset = queryset.filter(id=place_id)

        if place_type:
            place_types = place_type.split(',')
            queryset = queryset.filter(type__in=place_types)

        if name:
            queryset = queryset.filter(Q(name__icontains=name))

        if subtypes:
            subtypes = subtypes.split(',')
            query = Q(subtype__iregex=r"(^\s*{0}\s*,|,\s*{0}\s*,|,/s*{0}/s*$|^\s*{0}\s*$)".format(subtypes[0].strip()))
            for subtype in subtypes[1:]:
                query = query | Q(subtype__iregex=r"(^\s*{0}\s*,|,\s*{0}\s*,|,/s*{0}/s*$|^\s*{0}\s*$)".format(subtype.strip()))
            queryset = queryset.filter(query)

        if min_lat and max_lat and min_lon and max_lon:
            min_lon = Decimal(min_lon)
            max_lon = Decimal(max_lon)
            min_lat = Decimal(min_lat)
            max_lat = Decimal(max_lat)
            queryset = queryset.filter(latitude__range=(min_lat, max_lat),
                                       longitude__range = (min_lon, max_lon))

        queryset = queryset.filter(
            Q(type=6, date_to__gte=timezone.now()) |
            ~Q(type=6)
        )

        return queryset
    
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)


Permission.py

class IsBuisnessUser(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method == "DELETE": 
            return  obj.user == request.user

    def has_permission(self, request, view):
        if request.method == 'GET':
            return True

        elif request.method == 'POST':
            return request.user.type == 2


Как можно открыть доступ в GET одному пользователю, но заблокировать другому. То же самое и с Post?
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы