对象权限与Django的REST框架

对象权限与Django的REST框架

问题描述:

问题对象权限与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) 
+0

permission_classes = [permissions.IsAuthenticatedOrReadOnly,YourPermissionsHere] –

+0

从DRF权限的文档,这听起来像用户必须具有在所有的权限类权限,以便检查通过?所以,在这种情况下'IsAuthenticatedOrReadOnly'会通过,但'YourPermissionsHere' ='DjangoObjectPermissions'会失败?它是否正确? – Kieran

+0

是的。所有的权限类都应该满足。你可以尝试一样的。它应该工作。 –