2015-11-10 2 views
-1

Мы рассматриваем возможность использования Elasticsearch для нашего веб-сервиса. Поскольку ES работает на низком уровне, для аутентификации и авторизации над ним должен быть некоторый слой. Я вижу Shields, который, по-видимому, может контролировать на уровне ролей то, что user, и admin, developer и т. Д. Могут делать в индексе поиска. Однако я не мог найти способ управления доступом к данным на уровне пользователя: каждый пользователь должен иметь доступ ко всем публичным документам, а также к своим частным.Elasticsearch: документы личного пользователя

Есть ли плагин/парадигма ES, который обрабатывает это?

ответ

1

Идея Щит, чтобы иметь группу пользователей в индексированном документе:

{ 
    "text":"Document 1 is public", 
    "user_group": ["public"] 
} 
{ 
    "text":"Document 2 is restricted", 
    "user_group": ["restricted"] 
} 

Затем вы можете заставить фильтр применяться для указанной группы пользователей

# For users in group public 
{"term" : {"user_group" : "public"}} 

# For users in group restricted (can see public as well) 
{"terms" : {"user_group" : ["public","restricted"]}} 

Elasticsearch 2,0/Щит 2.0 улучшил Document level security. Prior to that вы были вынуждены использовать псевдонимы индекса.

SearchGuard (альтернатива Shield) ведет себя любит Щит: dlsfilter связывает группу пользователей с фильтром.

В обоих случаях привязка пользователя к документу может быть трудной задачей (невозможной?), Потому что все зависит от групп пользователей/ролей, а не от отдельных пользователей. Однако вы можете создать группу, специфичную для каждого пользователя. Каждый раз, когда вы добавляете пользователя, он заставит вас добавить группу пользователей и настроить его конкретные гранты.