【发布时间】:2020-10-10 16:40:43
【问题描述】:
我正在使用 ES 6.2.4 并且我正在使用 X-Pack。 我注册了一个具有以下角色的用户:
{
"password" : "changeme",
"roles" : [ "object_basic", "object_ext" ],
"full_name" : "FullName",
"email" : "sample@example.com",
"metadata" : {
"access_group_ids": ["1", "2", "3"]
}
}
我有以下安全角色。
Object_basic:
{
"indices": [
{
"names": [ "*cases_*" ],
"privileges": [ "read" ],
"field_security" : {
"grant" : [ "case_id","short_name", "type", "status", "owner_department" ]
},
"query": "{\"template\":{\"source\":\"{\\\"bool\\\":{\\\"should\\\":[{\\\"terms\\\":{\\\"case_access_owner_group_ids\\\": {{#toJson}}_user.metadata.access_group_ids{{/toJson}}}},{\\\"terms\\\":{\\\"case_access_contributor_group_ids\\\": {{#toJson}}_user.metadata.access_group_ids{{/toJson}} }},{\\\"terms\\\":{\\\"case_access_viewer_group_ids\\\": {{#toJson}}_user.metadata.access_group_ids{{/toJson}} }},{\\\"terms\\\":{\\\"case_access_basic_viewer_group_ids\\\": {{#toJson}}_user.metadata.access_group_ids{{/toJson}} }} ]}}\"}}"
}
]
}
Object_ext:
{
"indices": [
{
"names": [ "*cases_*" ],
"privileges": [ "read" ],
"field_security" : {
"grant" : [ "name", "description" ]
},
"query": "{\"template\":{\"source\":\"{\\\"bool\\\":{\\\"should\\\":[{\\\"terms\\\":{\\\"case_access_owner_group_ids\\\":{{#toJson}}_user.metadata.access_group_ids{{/toJson}}}},{\\\"terms\\\":{\\\"case_access_contributor_group_ids\\\":{{#toJson}}_user.metadata.access_group_ids{{/toJson}}}},{\\\"terms\\\":{\\\"case_access_viewer_group_ids\\\": {{#toJson}}_user.metadata.access_group_ids{{/toJson}}}}]}}\"}}"
}
]
}
两个安全角色查询之间的唯一区别是 object_ext 包含少一个 term(s) 条件(即:case_access_basic_viewer_group_ids)。
我提取了一些包含以下值的数据:
"case_access_owner_group_ids": [],
"case_access_contributor_group_ids": [],
"case_access_viewer_group_ids": [],
"case_access_basic_viewer_group_ids": ["2"],
当我将两个角色(object_basic 和 object_ext)分配给用户时,所有字段(包括“名称”、“描述”)都会返回。 这不是我所期望的。我希望不会返回“名称”、“描述”,因为只有 case_access_basic_viewer_group_ids 不包含在 object_ext 查询中。
现在,如果我更新用户的角色并且只保留 object_ext,那么它的行为正确且不返回任何内容。
如果我更新了用户的角色并且只留下了 object_basic,那么它不会返回“名称”、“描述”。
我当然希望同时为用户分配两个角色,并仅在足够的数组包含有效数据以及用户的元数据数组时才返回“名称”、“描述”。现在看起来,如果触发了 obj_basic 角色,它也会自动触发 obj_ext。
我做错了什么?
【问题讨论】:
标签: elasticsearch elasticsearch-x-pack