Я ищу, чтобы отфильтровать то, что видят пользователи в индексе Elasticsearch, далее я хочу отфильтровать какой-то документ во вложенный объект.
Я объясню короткий сценарий: у нас есть два пользователя: Алиса и БобАлиса работает над X, а Боб работает над Y. Мы получили документ о фильмах: Пример: имя: Дата в матрице: 1999 актеры: [Киану Ривз, Лоуренс Фишберн]
Теперь я хочу отфильтровать то, что могут видеть Алиса и Боб вполе актеров.В качестве примера можно увидеть Киану Ривза, который работает с X, и Лоуренса Фишберна, который работает с Y.
. Для этого я использую свойства безопасности X-Pack, но у меня есть некоторые проблемы и, возможно,Вы мне поможете.
Вот мое отображение индекса:
{
"settings": {
"index": {
"number_of_replicas": 0,
"number_of_shards": 1
}
},
"mappings": {
"properties": {
"security_attributes": {
"properties": {
"level": {"type":"short"},
"jobs": {"type":"keyword"},
"min_jobs": {"type":"short"}
}
},
"name":{"type":"text"},
"date":{"type":"text"},
"actors":{"type":"nested",
"properties":{
"security_attributes":{
"properties":{
"level": {"type":"short"},
"jobs": {"type":"keyword"},
"min_jobs": {"type":"short"}
}
},
"name":{ "type": "string"}
}
}
}
}
}'
И я пытаюсь предоставить шаблон запроса на роли пользователя.
{"template":
{"source":"
{"bool":
{"filter":
[{"range":
{"security_attributes.level":
{"lte": "{{_user.metadata.level}}"}}},
{"terms_set":{"security_attributes.jobs":
{"terms":{{#toJson}}_user.metadata.jobs{{toJson}},
"minimum_should_match_field": "security_attributes.min_jobs"}}}]}}"}
}
Чтобы отфильтровать документпо ролям или работам, которые работают, я знаю, что я хочу фильтровать внутри вложенного объекта по работам, но я не знаю, как я могу добавить этот фильтр в предыдущий шаблон.
У кого-то есть идея?