我期待到索引引擎,具体的Apache Lucene的Solr的。 我们愿意用它为我们的搜索,但通过我们的框架搜索解决的问题之一是行级访问。
Solr的不提供开箱记录访问:
<...>的Solr不符合安全无论是在文件级或通信水平关注自身。
而在有关文件级安全性的部分: http://wiki.apache.org/solr/SolrSecurity#Document_Level_Security
有一些建议 - 无论是使用集成块CF(这是高度在一个预测试很阶段无证,似乎)或编写自己的请求处理程序/搜索组件(即部分被标记为存根) - 我想,以后人们就必须对性能的影响更大。
所以,我认为没有多少在这一领域正在做。
在最近发布的4.0版本的Solr,他们已经推出了连接两个索引实体。 加入似乎是一个不错的主意,因为我们的框架也做了一个连接知道记录是否是用户访问。 这里的问题是,有时我们做一个内部联接,有时和外部(取决于乐观(一切有什么不禁止即自由)或悲观(什么是明确允许的一切都只是禁止)的范围内的安全设置)。
为了给出一个更好地了解我们的结构是这样的:
文件
DocumentNr | Name
------------------
1 | Foo
2 | Bar
DocumentRecordAccess
DocumentNr | UserNr | AllowRead | AllowUpdate | AllowDelete
------------------------------------------------------------
1 | 1 | 1 | 1 | 0
因此,例如,在悲观的安全设置文档生成的查询将是:
SELECT * FROM Documents AS d
INNER JOIN DocumentRecordAccess AS dra ON dra.DocumentNr=d.DocumentNr AND dra.AllowRead=1 AND dra.UserNr=1
这将只返回foo的,但不是吧。 而在乐观的设置:
SELECT * FROM Documents AS d
LEFT JOIN DocumentRecordAccess AS dra ON dra.DocumentNr=d.DocumentNr AND dra.AllowRead=1 AND dra.UserNr=1
返回两个 - 在Foo和酒吧。
说回我的问题 - 也许有人已经做到了这一点,并可以分享他们的见解和经验?