我想在弹性中应用文档级别的安全性,但是一旦我在用户元数据中提供了多个值,我就找不到匹配项。
我正在弹性创建一个角色和一个用户,并将用户元数据中的值传递给应该在其基础上进行搜索的角色。如果我给出一个值,它就可以正常工作。
创建角色:
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": []
}
}