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
问题
我正在使用 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