Разрешения для объектов с доступом только для чтения для анонимных пользователей в Django Rest Framework

Проблема

Я использую Django REST Framework – и до сих пор я использовал DjangoObjectPermissions разрешений DjangoObjectPermissions . Я использую django-rules чтобы определить, какие пользователи имеют разрешения для объектов.

Тем не менее, этот класс разрешений, по-видимому, запрещает доступ для чтения анонимным пользователям.

Мне нужно найти лучший способ разрешить доступ только для чтения всем пользователям (аутентифицированным или нет). Для дополнений, модификаций и удалений – права на объекты должны применяться как обычно.

Каков наилучший подход к решению этой проблемы? По умолчанию Django не предоставляет разрешение can_view .

Возможно, это потребует вручную добавления разрешения can_view для каждой модели. Или, может быть, лучше каким-то образом реализовать DjangoObjectPermissionsOrAnonReadOnly разрешений DjangoObjectPermissionsOrAnonReadOnly ?

2 Solutions collect form web for “Разрешения для объектов с доступом только для чтения для анонимных пользователей в Django Rest Framework”

Исправление было действительно простым. Можно создать собственный класс разрешений, расширяющий DjangoObjectPermissions , и переопределить переменную authenticated_users_only .

 class DjangoObjectPermissionsOrAnonReadOnly(DjangoObjectPermissions): authenticated_users_only = False 
 from rest_framework import permissions 

и просто дайте

  permission_classes = [permissions.IsAuthenticatedOrReadOnly, YourPermissionshere, ] 

в вашем представлении. Это сделает работу. если они не аутентифицированы, анонимные пользователи получат разрешение только для чтения

вы можете управлять, когда разрешения проверяются и не проверяются путем обработки функции

 self.check_object_permissions(self.request, obj) 
Interesting Posts

Простой пример использования ffmpeg в качестве подпроцесса Python и «проверка» на преобразовании

Как адаптировать или изменить размер прямоугольника внутри объекта, не включая (или с несколькими числами) фоновых пикселей?

python fdb, пытающийся подключиться к внешнему серверу Firebird 1.5 super

matplotlib: получить текстовую ограничительную рамку, независимую от бэкэнд

Несколько версий python с использованием virtualenv -p (и virtualenvwrapper-win) в Windows

Как я могу визуализировать веса (переменные) в cnn в Tensorflow?

очищать веб-сайты с бесконечной прокруткой

Как изменить ось x в matplotlib, чтобы не было пробела?

SQLAlchemy classic mapper "не удалось собрать какие-либо столбцы первичного ключа для отображаемой таблицы", несмотря на наличие первичного ключа?

Как я могу избавиться от этого предупреждения, чтобы перейти от pip?

Почему мое значение переменной не передается блоку finally в python

Интегрирование созданных в командной строке файлов python .coverage с помощью PyDev

Словарь Python в таблице html

Функция python isdigit () возвращает true для символа без цифры u '\ u2466'

Java эквивалентно словарям Python

Python - лучший язык программирования в мире.