#elasticsearch #solr #acl #rbac
#elasticsearch #solr #acl #rbac
Вопрос:
Популярные поисковые системы довольно эффективны, когда дело доходит до полнотекстового поиска и многих других аспектов, однако я не уверен, как сопоставить основные политики безопасности системы хранения документов с ES и / или SOLR?
Рассмотрим Google Диск и его папки. Пользователи могут совместно использовать любую папку — тогда файлы и папки ниже также будут доступны. Системы управления контентом используют нечто подобное.
Но как сопоставить это с внешними поисковыми системами (то есть не встроенными в систему управления контентом приложения), особенно, если во многих десятках тысяч папок миллионы документов, десятки тысяч пользователей? Поможет ли это, если, например, глубина (вложенность) папок ограничена небольшим числом?
Я знаю, что у ES есть роли пользователей, но я не вижу, чтобы это могло здесь помочь, потому что доступы задаются более или менее произвольно. Другой подход заключается в том, чтобы каким-то образом материализовать доступ пользователей к самим документам (папкам и документам), но тогда изменения ролей пользователей, локальных для какой-либо папки, приведут к изменению многих тысяч документов.
Кроме того, поиск может быть довольно произвольным и длительным, поэтому желательно иметь разбивку на страницы, поэтому, например, выборка «всего», а затем сортировка доступа пользователя на стороне приложения не является вариантом.
Я считаю, что описанный сценарий довольно распространен, но я не могу найти никаких подсказок, как его реализовать.
Ответ №1:
Я использовал solr в качестве поисковой системы и функцию обработчика импорта данных solr (DIH) для импорта данных из базы данных в Solr.
Я бы посоветовал вам использовать подход индексации списков acl вместе с документами.
Я использовал тот же подход, и до сих пор он работал нормально.
Я согласен с тем, что вы переиндексировали данные на стороне solr, когда произошли какие-либо изменения в доступе к папкам или изменении доступа к уровню документов. Нам нужно переиндексировать документ, если изменяются метаданные документа или изменяется содержимое документа. Аналогичным образом мы также можем обновлять документы на стороне solr для любых изменений в ACL (список управления доступом).
Зачем индексировать список управления доступом вместе с информацией о документе. Причина в том, что всякий раз, когда пользователь ищет документ, вы можете передать acl пользователя как часть запроса в форме запроса фильтра и получить документы, доступные пользователю. Я чувствую, что это устраняет сложность применения логики acl на серверной стороне.
Если вы не индексируете ACL в solr, то вам придется отфильтровывать документы после извлечения из solr, проверяя, что это за документ и какая логика acl применяется.
Или последним вариантом может быть индексирование документа без списков управления доступом. Пусть пользователь выполняет поиск по всем документам. Когда он пытается выполнить какое-либо действие с этими документами, вы можете проверить разрешение и разрешить пользователю выполнить действие или отказать пользователю, сказав, что у вас недостаточно разрешений для доступа к документу.
Действие может быть похоже на просмотр, загрузку, обновление и т. Д..
Вам нужно решить, какой подход подходит и работает в вашем случае.
Комментарии:
1. Итак, вы предлагаете материализовать информацию ACLS о каждом изменении для пользователя ИЛИ ресурса для потенциально большого количества документов? Вы пробовали это на практике?
2. ДА… Я предлагаю индексировать acl вместе с документами, и для каждого обновления вы можете переиндексировать данные… Сделали это для нашего продукта… работает нормально… переиндексация выполняется не сразу… но делается через каждые 4 часа…