对象权限与Django的REST框架
问题描述:
我使用Django的REST框架为匿名用户只读访问 - 到目前为止我一直使用DjangoObjectPermissions
权限类。我使用django-rules
来确定哪些用户具有对象的权限。
但是,此权限类似乎拒绝对匿名用户的读取访问。
我需要找到允许对所有用户进行只读访问的最佳方式(已验证或未验证)。对于添加,修改和删除 - 应该像平常一样应用对象权限。
解决此问题的最佳方法是什么? Django默认似乎没有提供can_view
权限。
也许这将涉及到为每个模型手动添加can_view
权限。或者也许最好以某种方式实现DjangoObjectPermissionsOrAnonReadOnly
权限类别?
答
的修复其实是非常简单的检查,你可以控制的。可以创建一个自定义权限类,延伸DjangoObjectPermissions
,并覆盖authenticated_users_only
变量。
class DjangoObjectPermissionsOrAnonReadOnly(DjangoObjectPermissions):
authenticated_users_only = False
答
from rest_framework import permissions
,并只给
permission_classes = [permissions.IsAuthenticatedOrReadOnly, YourPermissionshere, ]
在视图集中
。这将完成这项工作。 如果未通过身份验证,匿名用户将得到一个只读的权限
当权限检查,而不是通过处理功能
self.check_object_permissions(self.request, obj)
permission_classes = [permissions.IsAuthenticatedOrReadOnly,YourPermissionsHere] –
从DRF权限的文档,这听起来像用户必须具有在所有的权限类权限,以便检查通过?所以,在这种情况下'IsAuthenticatedOrReadOnly'会通过,但'YourPermissionsHere' ='DjangoObjectPermissions'会失败?它是否正确? – Kieran
是的。所有的权限类都应该满足。你可以尝试一样的。它应该工作。 –