Как вы справляетесь с управлением разрешениями при использовании индексов Elasticsearch?

Я использую django-guardian для управления разрешениями для каждого объекта и django-elasticsearch-dsl для более быстрых запросов к нашим данным. Это довольно просто для общедоступных списков, но у меня возникают трудности с разработкой масштабируемого управления разрешениями, чтобы в отфильтрованном списке отображались только те элементы, к просмотру и изменению которых у текущего пользователя request.user есть доступ.

Некоторые решения, предложенные ИИ:

  • Получите список uuid, к которым у пользователя есть доступ, а затем отфильтруйте элементы в elasticsearch по этим uuid (не очень масштабируемо).
  • Обработайте общедоступные результаты с помощью функций API django-guardian - однако это занимает слишком много времени для записей с десятками тысяч результатов (есть возможность пропустить разбивку на страницы и обработать только первую страницу, но это нежелательно).
  • Добавьте список идентификаторов пользователей и групп, которые могут просматривать, редактировать и удалять элементы, в индекс элементов и сверьте идентификатор текущего пользователя и идентификаторы групп с этими полями.
  • Создайте индекс для пользовательской модели со всеми доступными для просмотра, редактирования и удаления элементами по их uuid, а затем выполните terms_lookup в этом индексе, чтобы отфильтровать список рассматриваемых элементов по uuid, к которым пользователь может получить доступ.

Все эти подходы кажутся мне сомнительными, когда я думаю о десятках тысяч элементов или пользователях.

Что вы используете или использовали бы в таком случае?

Вернуться на верх