インデックス作成エンジン、特にApacheLuceneSolrを調べています。私たちはそれを検索に使用する用意がありますが、フレームワーク検索によって解決される問題の1つは、行レベルのアクセスです。
Solrは、箱から出してすぐにレコードアクセスを提供しません。
<...> Solrは、ドキュメントレベルでも通信レベルでもセキュリティに関心がありません。
そして、ドキュメントレベルのセキュリティに関するセクション:http ://wiki.apache.org/solr/SolrSecurity#Document_Level_Security
いくつかの提案があります-マニフォールドCF(非常に文書化されておらず、非常にプレベータ段階にあるようです)を使用するか、独自のリクエストハンドラ/検索コンポーネント(その部分はスタブとしてマークされています)を作成します-後者はパフォーマンスへの大きな影響。
ですから、この分野ではあまり行われていないと思います。
最近リリースされたSolrの4.0バージョンでは、2つのインデックス付きエンティティの結合が導入されました。私たちのフレームワークは、ユーザーがレコードにアクセスできるかどうかを知るために結合も行うため、結合は良い考えのように思えるかもしれません。ここでの問題は、内部結合を行う場合と、スコープ内の外部(楽観的(禁止されていないものすべてが許可される)または悲観的(明示的に許可されているもののみが禁止される)セキュリティ設定に応じて)を行う場合があることです。
私たちの構造がどのように見えるかをよりよく理解するために:
ドキュメント
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のみを返し、barは返しません。そして楽観的な設定で:
SELECT * FROM Documents AS d
LEFT JOIN DocumentRecordAccess AS dra ON dra.DocumentNr=d.DocumentNr AND dra.AllowRead=1 AND dra.UserNr=1
両方を返す-FooとBar。
私の質問に戻ります-多分誰かがすでにこれをしていて、彼らの洞察と経験を共有することができますか?