kullanıcı nesnelerini filtrelemek için django-guardian
ve django-rest-framework
projemi example in drf docs olarak ayarlamayı başardım, ancak istediğim davranışı gerçekleştiremiyorum. Birisi yanlış bir şey yapıyorum ya da istediğimi guardian
ile tamamlanamazsa lütfen işaret edebilir misiniz?Django-guardian Kullanıcının süzgeçlerini kullanarak django-guardian
Kur
settings.py
INSTALLED_APPS = (
...
'guardian',
'simple',
)
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'guardian.backends.ObjectPermissionBackend',
)
'DEFAULT_PERMISSION_CLASSES': (
'infrastructure.permissions.DjangoObjectPermissions',
)
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'],
}
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'),)
views.py
class EventViewSet(viewsets.ModelViewSet):
queryset = models.Event.objects.all()
serializer_class = serializers.EventSerializer
filter_backends = (filters.DjangoObjectPermissionsFilter,)
EventViewSet.list
tarafından döndürülen Events
listesi sadece içeren (istek kullanıcı view_event
izni VEYA ('view_event', event_object)
django.auth sahiptir istek kullanıcı görüntüleyebileceğiniz nesneleri
- Beklenen davranış.
EventViewSet.details
Event
örneğini, yalnızca istek kullanıcısıview_event
iznine sahipse VEYA('view_event', event_object)
iznini verir.
kullanıcı django auth izni view_event
ve vasi izni ('view_event', event_obj)
sahiptir
- Eğer gerçek hareketi, bu
event_obj
ilişkili yollarılist
(tüm girişleri alma) vedetails
erişebilirler. - Kullanıcı,
view_event
kimlik doğrulama yetkisine sahip değilse, ancak('view_event', event_obj)
güvenlik iznine sahipse, tüm yollarda (izinlere sahip oldukları event_obj ile ilişkilidetails
yolu dahil) bir 403 alırlar. - Kullanıcı
view_event
içeriyorsa ancak('view_event', event_obj)
yoksa,list
(tüm girişleri görerek) yoluna erişebilir, ancak erişilen girdiye bakılmaksızın,details
rotasında bir 404 alırlar.
Teşekkür ederiz!
Koruyucu ile oynamaya başladım ve aynı davranışı görüyorum. Ama ben 'filter_backends' ile denemedim, bu yüzden onu bir vereceğim. –