问题描述
我正在使用ES 6.2.4,并且正在使用X-Pack。 我注册具有以下角色的用户:
{
"password" : "changeme","roles" : [ "object_basic","object_ext" ],"full_name" : "FullName","email" : "[email protected]","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_*" ],"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所包含的条件较少(例如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)分配给用户时,将返回所有字段(包括“名称”,“描述”)。 这不是我所期望的。我希望不会返回“名称”,“描述”,因为object_ext查询中仅不包括 case_access_basic_viewer_group_ids 。
现在,如果我更新用户的角色,而只留下object_ext,则它的行为正确且不返回任何内容。
如果我更新了用户角色,而只留下了object_basic,则它不会返回“名称”,“描述”。
我当然希望同时为用户分配两个角色,并且仅当足够的数组包含有效数据以及用户的元数据数组时,才返回“名称”,“描述”。现在看来,如果触发了obj_basic角色,它也会自动触发obj_ext。
我在做什么错了?
解决方法
对于6.2.4版本,看起来(至少)看起来没有文档和字段级安全性与here所记录的索引相同。
如果您需要限制对文档和字段的访问,请考虑 而是按索引分割文档。
在特定条件下,这可能是一个真正的问题,因为它可能会强制对模型进行规范化。