弹性搜索每个用户对文档的访问控制

时间:2019-09-17 14:14:43

标签: elasticsearch indexing

我正在使用ElasticSearch 7.1.1作为全文本搜索引擎。开始时,所有用户都可以访问所有文档。我想让用户可以编辑文档。文档的修改后的版本仅对编辑者可用,其他所有人只能查看默认文档。

为此,我将向每个文档添加两个数组:

  • 无法查看文档的一系列用户
  • 具有唯一可以查看此文档的用户的数组

每次有人编辑文档时,我都会:

  • 将进行修改的用户添加到排除的用户列表中
  • 创建包含仅对该用户可用的编辑内容的文档。

这样,在索引中,我将拥有三种类型的文档:

  1. 每个人都可以访问的文件
  2. 除某些用户外所有人均可使用的文档
  3. 仅特定用户可以访问的文档

我不仅使用ElasticSearch来获取文档,而且还使用它来计算实时聚合(例如某个字段的总和),因此在查询时我将能够获取用户特定的文档。

我不希望进行大量修改,少于文档总数的1%。

是否有一种更智能,查询强度更低的方法来获得相同的结果?

1 个答案:

答案 0 :(得分:1)

您可以实现document level security

以此,您可以定义角色,以限制对与查询匹配的某些文档的读取权限(例如,您可以使用文档的ID)。

因此,您不必更新角色,而是分别通过将角色授予特定用户的角色来更新,而不必通过建议的阵列解决方案来每次更新文档。当然,这将要求每个用户都有一个Elasticsearch用户。

据我所知,此功能是满足 Elasticsearch 要求“即开即用”的表格的唯一解决方法。

希望我能为您提供帮助。