2016-06-22 4 views
1

Я хочу только администратора добавлять контент в модель, но это может быть прочитано кем угодно. Есть ли какой-либо существующий класс разрешений, который я могу использовать для него. Или то, что будет наилучшим подходом без уровня объекта permissions.Code для жеdjango rest framework разрешение 'isAdminorReadonly'

class TagList(generics.ListCreateAPIView): 
    serializer_class = TagSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_fields = ('title',) 
    def get_queryset(self): 
     return Tag.objects.all() 
+1

Вы смотрели на [ 'DjangoModelPermissionsOrAnonReadOnly'] (http://www.django-rest-framework.org/апи-гид/разрешения/# djangomodelpermissionsoranonreadonly)? Он будет доступен только для анонимных пользователей, и администраторы смогут редактировать их, пока вы назначаете правильные разрешения. – Alasdair

ответ

0

Да, есть существующее разрешение класса DjangoModelPermissionsOrAnonReadOnly, которые вы можете использовать.

Он предоставит авторизацию, если пользователь аутентифицирован и имеет соответствующие права доступа к объекту, но также позволит не прошедшим проверку подлинности пользователям иметь доступ только для чтения к API.

class TagList(generics.ListCreateAPIView): 
    ... 
    # add both permission classes 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, permissions.DjangoModelPermissionsOrAnonReadOnly,) 

От DRF documentation:

DjangoModelPermissions
Этого разрешения классовых связей в стандартных django.contrib.auth model разрешений Django. Это разрешение должно применяться только к представлениям, имеющим набор свойств .queryset. Авторизация будет предоставлена ​​только в том случае, если пользователь имеет authenticated, а имеет соответствующие разрешения модели.

POST Запросы требуют, чтобы пользователь имел разрешение add на модели .
PUT и PATCH Запросы требуют, чтобы пользователь имел разрешение на модель change .
DELETE Запросы требуют, чтобы у пользователя было разрешение delete на модель.

DjangoModelPermissionsOrAnonReadOnly
Подобно DjangoModelPermissions, но и позволяет неаутентифицированных пользователям иметь доступ только для чтения к API.

2

Давайте будем относиться к вашим вопросам.

  1. Есть ли какой-либо существующий класс разрешений, который я могу использовать для него?

Ans: Нет. Предоставлено drf (до версии 3), чтобы предоставить полный доступ к администратору и только для чтения (я тоже считаю анонимным).

  1. Какой будет лучший подход без разрешения уровня объекта?

Ans: Я хотел бы предложить, чтобы иметь разрешение на уровне пользовательского вида следующим образом:

from rest_framework.permissions import IsAdminUser, SAFE_METHODS 

class IsAdminUserOrReadOnly(IsAdminUser): 

    def has_permission(self, request, view): 
     is_admin = super(
      IsAdminUserOrReadOnly, 
      self).has_permission(request, view) 
     # Python3: is_admin = super().has_permission(request, view) 
     return request.method in SAFE_METHODS or is_admin 
Смежные вопросы