Skip to main content

用户收藏接口权限设置

在开发Web应用程序时,对于某些接口或视图,我们可能需要限制只有特定的用户才能访问或修改。比如,收藏电影的接口,用户张三只能访问添加和删除电影的接口,而管理员可以实现其他接口。

本节我们将介绍如何在Django REST Framework中设置用户收藏接口的权限。

权限设置

首先,我们将只允许授权用户访问和修改用户的收藏接口。我们可以通过设置 permission_classes 来实现这一目的,默认情况下,我们将其设置为 IsAuthenticated,即仅允许已认证的用户访问。

from rest_framework import permissions

class MyView(APIView):
permission_classes = [permissions.IsAuthenticated]
...

然而,在进行修改操作时,我们还需要验证当前请求的方法是否为 PUTPATCH,并且需要管理员权限。为了实现这一点,我们可以重写 get_permissions 方法,并根据请求方法返回不同的权限。

dx_movie/account/views.py
from rest_framework.permissions import IsAuthenticated, IsAdminUser

from movie.models import Movie
from movie.serializers import MovieSerializer
from account.models import Profile

# Create your views here.
class CollectViewSet(viewsets.ModelViewSet):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
permission_classes = [IsAuthenticated]

def get_permissions(self):
if self.request.method in ['PUT', 'PATCH']:
return [IsAdminUser()]
return [IsAuthenticated()]

测试权限设置

在使用 PUTPATCH 方法进行修改操作时,只有管理员用户才能成功返回 True。否则,默认使用已登录用户的权限。以下是测试的步骤和结果:

  1. 使用管理员用户进行修改操作:修改成功。
  2. 使用非管理员用户进行修改操作:返回未授权的错误信息。

通过如上配置,我们可以实现对用户收藏接口的权限设置,确保只有管理员才能修改相关信息。在其他接口中,我们也可以根据类似的方式进行设置。

非管理员用户进行修改操作如下图所示。

图48-普通用户调用修改收藏接口

管理员用户进行修改操作,如下图所示。

图58-管理员用户修改收藏接口成功

总结

本文介绍了如何在Django REST Framework中设置用户收藏接口的权限。我们通过设置 permission_classes 并重写 get_permissions 方法,实现了只有管理员才能访问和修改接口的功能。同样的方法也可以应用于其他接口,以实现更灵活的权限控制。