Ограничить изображения, которые видит редактор в трясогузке, только теми, что они загрузили? - PullRequest
1 голос
/ 27 апреля 2019

У меня настроен администратор Wagtail, поэтому редакторы могут только добавлять и редактировать страницы блога, которые они создают.Проблема заключается в том, что при использовании средства выбора изображений для выбора изображений они могут видеть каждое изображение, загруженное на сайт.Мне нужно, чтобы они видели только загруженные ими изображения.

Мой сайт настроен так, что моя целевая аудитория может зарегистрировать учетную запись, используя django-allauth.После регистрации они автоматически назначаются в пользовательскую группу «Автор».Авторы могут добавить страницу «Профиль», а затем столько «историй» или статей, сколько пожелают.Истории - это часть профиля, поэтому URL выглядит следующим образом: website.com/some_user/some_user_story.

Это прекрасно работает, поскольку «авторы» могут создавать, редактировать и просматривать только те страницы, которые мне нужны.,Но при добавлении изображений на страницы их истории с помощью средства выбора изображений им показывается каждое изображение в коллекции «Авторы».Это не сработает, так как они должны видеть только свои загруженные изображения.

Я понимаю, что то, что мне нужно, официально не поддерживается из коробки.Однако я проверил таблицы базы данных, и таблица wagtailimages_image действительно отслеживает uploaded_by_user_id .

Есть ли класс, метод, ловушка или сигнал, которые я могу переопределить, чтобы перехватить и запросить базу данных, чтобы создать желаемое поведение?

1 Ответ

0 голосов
/ 04 мая 2019

Действительно, для этого уже есть крючок.В итоге я реализовал хук construct_image_chooser_queryset.Документация находится здесь: http://docs.wagtail.io/en/v2.5/reference/hooks.html#construct-image-chooser-queryset

В проекте у меня есть приложение под названием «панель инструментов», где у меня есть весь код для настройки администратора Wagtail.В этом приложении я создал файл wagtail_hooks.py и добавил следующий код:

# Filter images in the image_chooser based on user
@hooks.register('construct_image_chooser_queryset')
def filter_images_by_user(images, request):
    images = images.filter(uploaded_by_user=request.user)

    return images

Чтобы закончить, я создал новую коллекцию изображений для группы «Авторы».Затем в настройках группы «Автор» добавили эту коллекцию изображений и присвоили ей разрешение «Добавить».

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

...