sim*_*nes 1 django django-rest-framework
在 django 管理界面中,可以指定每个模型的权限。示例模型 Customer 的权限选项为:
然而,这些权限似乎不适用于 REST Framework API 视图 ( rest_framework.viewsets.ModelViewSet),实现Customer如下:
class CustomerViewSet(viewsets.ModelViewSet):
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model = Customer
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
我认为通过将 DEFAULT_PERMISSION_CLASSES 设置为 DjangoModelPermissions 这些权限将得到反映,但事实并非如此:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.DjangoModelPermissions',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
}
Run Code Online (Sandbox Code Playgroud)
管理中定义的权限是否应该在视图中也适用于这些设置,是否不应该,和/或有什么方法可以实现这种情况?这样做的好处是系统管理员可以轻松地在管理界面中定义组并根据其问题区域定制权限,因此能够以这种方式定义权限是非常理想的。我已经看到了许多其他实现权限的方法,但从我所看到的来看,它们需要对 python 中的视图定义进行大量自定义。
版本:
小智 5
对于检查组和权限的API视图,我们可以在views.py中使用DjangoModelPermission,如下所示。
from rest_framework.permissions import DjangoModelPermissions
class CustomerViewSet(viewsets.ModelViewSet):
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
permission_classes = (DjangoModelPermissions, )
Run Code Online (Sandbox Code Playgroud)
它限制 POST、PUT 和 DELETE 访问,但允许 GET 访问。也想限制一下
from rest_framework.permissions import DjangoModelPermissions
class CustomDjangoModelPermissions(DjangoModelPermissions):
def __init__(self):
self.perms_map['GET'] = ['%(app_label)s.view_% (model_name)s']
class CustomerViewSet(viewsets.ModelViewSet):
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
permission_classes = (CustomDjangoModelPermissions, )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1337 次 |
| 最近记录: |