lda*_*vid 5 django-rest-framework django-guardian
我能够设置django-guardian和我的django-rest-framework项目作为drf文档中的示例,但我没有实现我想要的行为.有人可以指出,如果我做错了什么或者我想做什么都不能用guardian?
建立
settings.py
INSTALLED_APPS = (
...
'guardian',
'simple',
)
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'guardian.backends.ObjectPermissionBackend',
)
'DEFAULT_PERMISSION_CLASSES': (
'infrastructure.permissions.DjangoObjectPermissions',
)
Run Code Online (Sandbox Code Playgroud)
infrastructure.permissions.py
from rest_framework import permissions
class DjangoObjectPermissions(permissions.DjangoObjectPermissions):
"""
Similar to `DjangoObjectPermissions`, but adding 'view' permissions.
"""
perms_map = {
'GET': ['%(app_label)s.view_%(model_name)s'],
'OPTIONS': ['%(app_label)s.view_%(model_name)s'],
'HEAD': ['%(app_label)s.view_%(model_name)s'],
'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)
models.py
class Event(models.Model):
name = models.CharField(max_length=255)
min_age = models.IntegerField()
def __str__(self):
return self.name
class Meta:
permissions = (('view_event', 'Can view event'),)
Run Code Online (Sandbox Code Playgroud)
views.py
class EventViewSet(viewsets.ModelViewSet):
queryset = models.Event.objects.all()
serializer_class = serializers.EventSerializer
filter_backends = (filters.DjangoObjectPermissionsFilter,)
Run Code Online (Sandbox Code Playgroud)
预期的行为
Events返回的列表EventViewSet.list仅包含请求用户可以查看的对象(请求用户具有django.auth view_event权限或('view_event', event_object).EventViewSet.detailsEvent仅当请求用户具有view_event权限或('view_event', event_object)权限时才返回实例.实际行为
view_event和监护人权限('view_event', event_obj),则可以访问路由list(获取所有条目)并details与之关联event_obj.view_event但具有监护人权限('view_event', event_obj),则他们在所有路由中收到403(包括details与他们有权限的event_obj相关联的路由).view_event但没有('view_event', event_obj),他们可以访问路由list(查看所有条目),但details无论访问的条目如何,它们都会在路由中收到404 .谢谢!
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |