django rest模型权限
我正在使用Django 2.1和Djangorest框架3.9.2。我希望能够通过Django管理界面控制对Django模型对象上REST操作的访问,最好使用用户权限。例如,只有对模型对象Foo具有读取权限的用户才能在我的restapi中看到Foo 我读了,似乎我可以使用或 但是,当我清除数据库中的所有用户权限,并将DEFAULT_permissions_类设置为DjangoModelPermissions或DjangObjectPermissions时,我仍然能够在RESTAPI中看到一些东西。这意味着缺乏权限并不能阻止我看到我希望看到的对象 示例设置: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中看到一些东西
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仅强制执行数据修改的权限规则(对于POST、PUT、补丁和删除请求),但不强制执行数据查看的权限规则 要限制数据查看,可以添加自定义视图权限,并添加子类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以使用该权限,如下所述:噢,谢谢!如果你把这个作为答复,我会接受的。遗憾的是,它说,“参考源代码了解详细信息”,但现在我知道了。啊,它已经提交了: