0

我试图弄清楚如何在 Lucene.Net 索引中管理受限数据,假设您有一个类似以下内容的个人文档:

Name: Peter Pan
Locations: Neverland, London, Paris

现在假设我有 2 个用户,UserA 和 UserB,他们分别被允许查看的原因是:

UserA: 
  Name: Peter Pan
  Locations: Neverland, London

UserB: 
  Name: Peter Pan
  Locations: London, Paris

现在我希望允许他们两个都在 Locations 上搜索,但是由于 UserB 看不到 Peter Pan 去过 Neveland,因此在“Neverland”上搜索不会将 Peter 作为 UserB、Visa-Versa 与 UserA 和 Paris 的结果,但都可以看到伦敦...

我必须处理的数据比这要复杂得多,但是这些东西的开启和关闭方式是我们所说的警告,所以要深入了解上述内容,他们看到的原因可能是举例他们有权查看数据,但需要注意以下事项:

UserA: AAA, BBB
UserB: BBB, CCC

并且因为 peter 的位置数据条目被标记为:

Neverland - AAA
London - BBB
Paris - CCC

举个例子...

我希望这种概述情况足以至少开始讨论。

1. 复制模型

显然,我可以将所有数据条目正确地分成构成“文档”的位,而不是将彼得潘存储为一个大文档,我可以将其分割出来,但这会让我遇到可能获得多次点击的情况在与我看到的相同的实际对象上......它也将分配字段。

2. 多份文件

或者,我可以存储一个文档 pr。仅对数据 a 进行限制,以限制单个警告可能赋予的权利,据我所知,这再次提供了多次点击,并且还提供了“冗余”数据的分配。

3. 按DataBase往返过滤

最后但并非最不重要的是,我可以执行搜索忽略警告,然后不是直接从 Lucene 显示结果,我可以让我们的 DataAccess 层为我做警告过滤,这将比需要更早地添加到数据库的往返行程.

尽管到数据库的往返可能是我最不关心的问题。也有事实。当涉及到搜索词时,Lucene 将返回可能实际上不是命中的命中,因为生成该命中的值可能对该用户不可见。

这也意味着“结果数量”可能会关闭。

总而言之,这不仅仅是一个额外的数据库往返,我们还必须在提取结果后“重做”过滤。


如果可能的话,我会听到是否可以联系到比我有更多 Lucene 经验的人提供一些意见。

提前致谢。

4

1 回答 1

0

如果您可以按组分配权限(即“所有看不到梦幻岛之旅的用户”),您可以向每个文档添加一个字段(或多个字段,具体取决于您的权限的复杂性),通知 UI 忽略所有梦幻岛之旅.

如果您无法对权限进行分组,则可以(如果在存在大量用户的情况下难以操作)将每个用户的权限添加到每个文档,然后让 UI 适当地处理这些权限。这将使您对每个用户的每个文档都有单独的权限(类似于文件系统权限)。

于 2013-08-16T19:10:01.710 回答