【发布时间】:2017-12-21 03:58:09
【问题描述】:
我正在尝试创建一个安全过滤器,以排除某些用户在 elasticsearch 中查看某些文档。例如,如果文档包含“ABC:123”和“ABC:XYZ”,则用户必须在其个人资料中同时拥有这两者才能查看该文档。我们正在使用 mustache 模板动态创建它。我的第一次尝试是这样的:
"bool": {
"filter": {
"bool": {
"minimum_should_match": 1,
"should": {
"bool": [{
"must_not": {
"prefix": {
"controlSet": "ABC:"
}
}
},{
"must": {
"terms": {
"controlSet": ["ABC:123","ABC:XYZ"]
}
}
}]
}
}
}
}
但是,我很快意识到,这将允许具有一个控件的用户查看具有多个控件的文档。文档必须具有用户必须匹配的控件子集。因此,如果用户只有“ABC:XYZ”,即使文档还包含“ABC:XYZ”,他们也不应该看到包含“ABC:123”的文档。
有没有办法完成我所缺少的?目前我们枚举系统中的所有控件并将它们添加到 must_not 但控件会定期更改,我宁愿不手动维护该列表。
【问题讨论】:
标签: elasticsearch elasticsearch-5