django rest模型权限

django rest模型权限,django,django-rest-framework,Django,Django Rest Framework,我正在使用Django 2.1和Djangorest框架3.9.2。我希望能够通过Django管理界面控制对Django模型对象上REST操作的访问,最好使用用户权限。例如,只有对模型对象Foo具有读取权限的用户才能在我的restapi中看到Foo 我读了,似乎我可以使用或 但是,当我清除数据库中的所有用户权限,并将DEFAULT_permissions_类设置为DjangoModelPermissions或DjangObjectPermissions时,我仍然能够在RESTAPI中看到一些东西

我正在使用Django 2.1和Djangorest框架3.9.2。我希望能够通过Django管理界面控制对Django模型对象上REST操作的访问,最好使用用户权限。例如,只有对模型对象Foo具有读取权限的用户才能在我的restapi中看到Foo

我读了,似乎我可以使用或

但是,当我清除数据库中的所有用户权限,并将DEFAULT_permissions_类设置为DjangoModelPermissions或DjangObjectPermissions时,我仍然能够在RESTAPI中看到一些东西。这意味着缺乏权限并不能阻止我看到我希望看到的对象

示例设置:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.DjangoModelPermissions',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
}
对象视图示例:

from rest_framework import routers, serializers, viewsets
from .models import Example

class ExampleSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Example
        fields = '__all__'

class ExampleViewSet(viewsets.ModelViewSet):
    queryset = Example.objects.all()
    serializer_class = ExampleSerializer

router = routers.DefaultRouter()
router.register(r'examples', ExampleViewSet)

建议?

DjangoModelPermissions仅强制执行数据修改的权限规则(对于POSTPUT补丁删除请求),但不强制执行数据查看的权限规则

要限制数据查看,可以添加自定义视图权限,并添加子类DjangoModelPermissions以使用该权限,如中所述

编辑:

在Django 2.1中,添加了查看模型权限。因此,在未来的版本中,DjangoModelPermissions可能会支持这一点,但在此之前,您可以尝试将DjangoModelPermissions子类化,如下面所示,以添加查看权限检查:

class DjangoModelPermissionsWithRead(DjangoModelPermissions):
    perms_map = {
        'GET': ['%(app_label)s.view_%(model_name)s'],
        'OPTIONS': [],
        'HEAD': [],
        'POST': ['%(app_label)s.add_%(model_name)s'],
        'PUT': ['%(app_label)s.change_%(model_name)s'],
        'PATCH': ['%(app_label)s.change_%(model_name)s'],
        'DELETE': ['%(app_label)s.delete_%(model_name)s'],
    }

编辑2:有。

您可以发布您希望受这些权限设置影响的视图吗?在文档中:“此权限只能应用于具有.queryset属性集的视图。”这可能是原因吗?添加,谢谢。我只是从文档中举了一个简单的例子,但我找不到确切的位置。另一件事是,DjangoModelPermissions只强制执行数据修改的权限规则(对于POST、PUT、PATCH和DELETE请求),而不强制执行数据查看的权限规则。要限制数据查看,可以添加自定义视图permisson和子类DjangoModelPermissions以使用该权限,如下所述:噢,谢谢!如果你把这个作为答复,我会接受的。遗憾的是,它说,“参考源代码了解详细信息”,但现在我知道了。啊,它已经提交了: