Solr没有文档级别的安全性,所以您将不得不为每个文档检索和索引访问控制列表。然后,您需要对每个搜索应用过滤器查询并传入用户的安全组和/或用户名。
比方说,你的文档被索引这样的,其中对于多值字段“访问”的值是在索引时间通过在文件中的实际权限决定:
<doc>
<field name="id">42</field>
<field name="name">Products.xlsx</field>
<field name="title">Product list</field>
<field name="content">...</field>
<field name="access">COMPANY\Marketing</field>
<field name="access">COMPANY\CustomerService</field>
</doc>
然后你可以装点查询请求在solrconfig.xml中默认的过滤器查询参数的处理程序:
<requestHandler name="/select" class="solr.SearchHandler">
<defaults>
<str name="fq">access:"COMPANY\Everyone"</str>
</default>
</requestHandler>
默认情况下,现在搜索将不会返回Products.xlsx文件,因为这是模拟的默认的“用户”(即“COMPANT \每个人”)不不出现在“访问”字段中。但只要你一个真实用户群覆盖默认筛选器查询中传递,Solr的将返回文档:
/solr/collection1/select?q=content:"product x"&fq=access:"COMPANY\Marketing"
当然这时的权限更改,指数必须尽快更新以反映此。