Я хочу применить защиту на уровне документа в эластичном, но как только я предоставляю более одного значения в метаданных пользователя, я не получаю совпадений.
Я создаю роль и пользователя в эластичных и передавая значения внутри пользователяметаданные роли, на основе которой должен осуществляться поиск.Это работает нормально, если я приведу одно значение.
Для создания роли:
PUT _xpack/security/role/my_policy
{
"indices": [{
"names": ["my_index"],
"privileges": ["read"],
"query": {
"template": {
"source": "{\"bool\": {\"filter\": [{\"terms_set\": {\"country_name\": {\"terms\": {{#toJson}}_user.metadata.country_name{{/toJson}},\"minimum_should_match_script\":{\"source\":\"params.num_terms\"}}}}]}}"
}
}
}]
}
И для пользователя:
PUT _xpack/security/user/jack_black
{
"username": "jack_black",
"password":"testtest",
"roles": ["my_policy"],
"full_name": "Jack Black"
"email": "jb@tenaciousd.com",
"metadata": {
"country_name": ["india" , "japan"]
}
}
Я ожидаю, что выходные данные будут результатами для Индиии только япония.Если пользователь ищет что-то еще, он не должен получить никаких результатов.
Однако я не вижу никаких результатов:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}