Django Rest Framework 中匿名用户具有只读访问权限的对象权限

Object permissions with read only access for anonymous users in Django Rest Framework

问题

我正在使用 Django REST Framework - 到目前为止我一直在使用 DjangoObjectPermissions 权限 class。我使用 django-rules 来确定哪些用户对对象具有权限。

但是,此权限 class 似乎拒绝匿名用户的读取权限。

我需要找到允许所有用户(无论是否经过身份验证)进行只读访问的最佳方法。对于添加、修改和删除 - 应正常应用对象权限。

解决此问题的最佳方法是什么?默认情况下,Django 似乎没有提供 can_view 权限。

也许这将涉及为每个模型手动添加 can_view 权限。或者以某种方式实施 DjangoObjectPermissionsOrAnonReadOnly 权限 class?

可能更好
from rest_framework import permissions

然后给

 permission_classes = [permissions.IsAuthenticatedOrReadOnly, YourPermissionshere, ]

在您的视图集中。这样就可以了。 如果未通过身份验证,匿名用户将获得只读权限

您可以通过处理函数来控制何时检查和不检查权限

self.check_object_permissions(self.request, obj)

修复实际上非常简单。可以创建自定义权限 class 扩展 DjangoObjectPermissions,并覆盖 authenticated_users_only 变量。

class DjangoObjectPermissionsOrAnonReadOnly(DjangoObjectPermissions):
    authenticated_users_only = False