dfr*_*kow 4 django django-rest-framework
我正在使用 Django 2.1 和 djangorestframework 3.9.2。我希望能够通过 Django 管理界面控制对 Django 模型对象的 REST 操作的访问,最好使用用户权限。例如,只有对模型对象 Foo 具有读取权限的用户才能在我的 REST API 中看到 Foo。
我阅读了文档,似乎我可以使用DjangoModelPermissions或DjangoObjectPermissions。
但是,当我清除数据库中的所有用户权限,并将 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',
),
}
Run Code Online (Sandbox Code Playgroud)
一个示例对象视图:
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)
Run Code Online (Sandbox Code Playgroud)
建议?
DjangoModelPermissions 只强制执行数据修改的权限规则(对于POST、PUT、PATCH和DELETE请求),但不强制执行数据查看的权限规则。
要限制数据查看,您可以添加自定义视图权限,并将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'],
}
Run Code Online (Sandbox Code Playgroud)
编辑 2:提交了一个功能请求来支持这一点。
| 归档时间: |
|
| 查看次数: |
1848 次 |
| 最近记录: |