【问题标题】:Creating a security filter in elasticsearch在 elasticsearch 中创建安全过滤器
【发布时间】: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


    【解决方案1】:

    假设您的文档如下所示:

    {
        ...
        "controlSet": ["ABC:123", "ABC:XYZ"],
        ...
    }
    

    controlSetkeyword 字段,下面的查询应该可以解决问题:

    {
        "bool": {
            "filter": {
                "terms": {
                    "controlSet": ["ABC:123", "ABC:XYZ"]
                }
           }
        }
    }
    

    它将匹配具有至少ABC:123ABC:XYZcontrolSet 的文档

    【讨论】:

    • 问题是"controlSet": ["ABC:123"]也会匹配。我需要一些方法来强制用户拥有文档拥有的控件的超集。
    【解决方案2】:

    我可能已经找到了解决方案...

    {
        "bool": {
            "must_not": {
                "regexp": {
                    "value": "ABC:~(XYZ|123)",
                    "flags": "COMPLEMENT"
                }
            }
        }
    }
    

    这应该允许带有 ABC:XYZ 或 ABC:123(或两者)的文档,同时排除带有 ABC:[anything else] 的文档

    我当然担心正则表达式的速度,但我认为缺少通配符会使其相对较快。

    【讨论】:

      猜你喜欢
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2015-08-29
      • 2015-04-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多