我只希望管理员向模型添加内容,但任何人都可以阅读。是否有任何现有的权限类可供我使用。或者没有对象级别权限的最佳方法是什么。相同的代码是
class TagList(generics.ListCreateAPIView):
serializer_class = TagSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('title',)
def get_queryset(self):
return Tag.objects.all()
请您参考如下方法:
让我们具体回答您的问题。
- 是否有任何现有的权限类可供我使用?
回答:不可以。drf(直到第 3 版)没有提供对管理员的完全访问权限和对任何人(我相信也是匿名的)只读的权限。
- 没有对象级权限的最佳方法是什么?
回答:我建议有一个自定义 View 级别的权限,如下所示:
from rest_framework.permissions import IsAdminUser, SAFE_METHODS
class IsAdminUserOrReadOnly(IsAdminUser):
def has_permission(self, request, view):
is_admin = super(
IsAdminUserOrReadOnly,
self).has_permission(request, view)
# Python3: is_admin = super().has_permission(request, view)
return request.method in SAFE_METHODS or is_admin
