1

I want to apply document level security in elastic, but once I provide more than one value in user metadata I get no matches.

I am creating a role and a user in elastic and passing values inside user metadata to the role on whose basis the search should happen. It works fine if I give one value.

For creating role:

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\"}}}}]}}"
            }
        }
    }]
}

And for user:

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"]
    }
}

I expect the output to be results for india and japan only. If the user searches for anything else they should get no results.

However, I do not see any results at all:

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
    }
}
Adam T
  • 1,481
  • 11
  • 20

0 Answers0