django rest模型权限

弗兰科夫

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

我阅读了文档,似乎可以使用DjangoModelPermissionsDjangoObjectPermissions了

但是,当我清除数据库中的所有用户权限并将DEFAULT_PERMISSIONS_CLASS设置为DjangoModelPermissions或DjangoObjectPermissions时,我仍然可以在REST API中看到内容。这意味着缺少权限不会阻止我看到我所希望的对象。

设置示例:

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)

有什么建议吗?

奥兹古尔·阿卡利(Ozgur Akcali)

DjangoModelPermissions仅强制执行用于数据修改的权限规则(用于POSTPUTPATCHDELETE请求),而不强制执行用于数据查看的权限规则。

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

编辑:

在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'],
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我的Django模型的权限

来自分类Dev

Django REST框架:使用对象级权限而不使用模型级权限

来自分类Dev

Django Rest Framework API权限

来自分类Dev

Django Rest Framework权限冲突

来自分类Dev

Django Rest Framework权限冲突

来自分类Dev

Django Rest Framework-创建权限

来自分类Dev

django rest框架:对象字段权限

来自分类Dev

Django-REST外键对象权限

来自分类Dev

Django Rest Framework中CreateAPIView的权限

来自分类Dev

Django REST框架-每个方法的单独权限

来自分类Dev

在Django Rest框架中添加IsAuthenticatedOrReadOnly权限

来自分类Dev

Django Rest Framework:设置功能视图的权限

来自分类Dev

Django Rest Framework中有多个模型?

来自分类Dev

Django从模型或视图调用REST API?

来自分类Dev

Django-Rest Framework多个模型

来自分类Dev

Django REST:合并两个模型

来自分类Dev

不包括Django rest相关模型

来自分类Dev

Django rest框架。返回嵌套的多个模型

来自分类Dev

Django Rest Framework的贯穿模型问题

来自分类Dev

Django Rest框架和模型继承

来自分类Dev

Django Rest从其他模型更新对象

来自分类Dev

Django Rest Framework,使用多个模型查询

来自分类Dev

没有模型的 Django REST API 框架

来自分类Dev

使用Django模型权限会引发DidNotExist错误

来自分类Dev

在Django中为用户模型添加权限

来自分类Dev

从身份验证模型中删除Django默认权限

来自分类Dev

Django:基于组的模型的自定义权限

来自分类Dev

Django管理站点未显示模型的默认权限

来自分类Dev

Django rest 框架,使用 django-hvad 翻译模型