我有数据只能向有权利的人公开,数据有一个元字段调用“系统”,有数百个系统,我们在数据库中预先定义了授权用户,我该如何设计系统到是否允许授权用户仅获得他或她有权获得的数据?例如如果Adam来自Equity团队,他可以查看系统1-10的搜索结果,而不是其他人;如果Amily来自审核团队,她可以查看所有系统1-200的搜索结果。
非常感谢。
答案 0 :(得分:0)
对于小数量的系统(即计数不超过查询中布尔项的最大数量),添加fq=system:(1 OR 2 OR 3 OR 4 OR 5 ... OR 10)
是限制结果集的最简单方法 - 这假定允许用户访问文档中的所有字段。您的外部系统可以提供允许用户访问的系统ID列表,然后将fq
每个请求应用于Solr。
这对每个请求都很重要,因为用户可以通过方面和其他元信息接触到他们不应该访问的数据。
Bloomberg有一个很好的演示文稿,介绍了他们如何在one of their 2014 Lucene/Solr Revolution talks - Efficient Scalable Search in a Multi-Tenant Environment中攻击这个问题 - 他们的目标远远低于为字段中的部分实现不同的访问权限。
答案 1 :(得分:0)
我认为您的查询的最佳解决方案,您可以创建文档,并且您可以为每个文档添加多值字段,我们将其称为userAllow。
每当您以下面的方式在过滤器查询中查询solr pass userid时,solr只返回那些拥有这些用户权限的文档。
如果Adam userid为1,那么
q:(Your Query)
fq:SolrAllow:1
结果集仅包含具有userid 1权限的记录。
你也可以用这种方式实现它。