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