参考記事:http://www.rondhuit.com/apache-manifoldcf-mcf-security-searchcomponent-plugin.html
こちらはCentOS7、Solr6とManifoldCF2.4のバージョンを使用しています。
1.ManifoldCF(略:MCF)公式サイトからSolr6版のMCFセキュリティーサーチコンポーネントを入手
solr6に対応のバージョンの所在ですが、英語版Downloadページにありました(日本語ページにはなかったようです)
2.取得したapache-manifoldcf-solr-6.x-plugin-2.2-bin.tar.gzをSolrに配置
Solr5以降はコアがsolrのインストールした場所ではなくvar/solr/data/
で作成されるようになったようです。<corename>
そこにlibフォルダーを作成して、上記ファイルを解凍したjarをコピーする
mkdir -p var/solr/data/
<corename>
/lib
cp apache-manifoldcf-solr-6.x-plugin-2.2.jar var/solr/data/
<corename>
/lib
3.Solr側のschema.xmlとsolrconfig.xmlを編集する
場所はvar/solr/data//conf、schema.xml名前がmanaged_schema.xmlに変わった模様
先ほど解凍したjarのフォルダーにReadme.txtがあるので、そちらを参照。
- managed_schema.xmlにフィールド追加
...
<field name="allow_token_document" type="string" indexed="true" stored="true"
multiValued="true" required="true" default="__nosecurity__"/>
<field name="allow_token_parent" type="string" indexed="true" stored="true"
multiValued="true" required="true" default="__nosecurity__"/>
<field name="allow_token_share" type="string" indexed="true" stored="true"
multiValued="true" required="true" default="__nosecurity__"/>
<field name="deny_token_document" type="string" indexed="true" stored="true"
multiValued="true" required="true" default="__nosecurity__"/>
<field name="deny_token_parent" type="string" indexed="true" stored="true"
multiValued="true" required="true" default="__nosecurity__"/>
<field name="deny_token_share" type="string" indexed="true" stored="true"
multiValued="true" required="true" default="__nosecurity__"/>
...
- solrconfig.xmlにsearchComponentとqueryParserを追加し、にフックする
...
<!-- ManifoldCF document security enforcement component -->
<searchComponent name="manifoldCFSecurity"
class="org.apache.solr.mcf.ManifoldCFSearchComponent">
<str name="AuthorityServiceBaseURL">http://localhost:8345/mcf-authority-service</str>
<int name="ConnectionPoolSize">50</int>
</searchComponent>
...
<requestHandler name="/select" class="solr.SearchHandler">
...
<arr name="last-components">
<str>manifoldCFSecurity</str>
</arr>
...
</requestHandler>
...
...
<!-- ManifoldCF document security enforcement component -->
<queryParser name="manifoldCFSecurity"
class="org.apache.solr.mcf.ManifoldCFQParserPlugin">
<str name="AuthorityServiceBaseURL">http://localhost:8345/mcf-authority-service</str>
<int name="ConnectionPoolSize">50</int>
</queryParser>
...
<requestHandler name="/select" class="solr.SearchHandler">
...
<lst name="appends">
<str name="fq">{!manifoldCFSecurity}</str>
</lst>
...
</requestHandler>
...
以上で設定完了です。反映するためSolrを再起動する必要があります。
MCFのクロールを再度実行して、セキュリティー管理用フィールドのインデックスを投入します。
検索時はAuthenticatedUserNameをパラメータとして渡す必要があります。
動作確認するには以下のクエリーを投入してみてください。
http://localhost:8983/solr/corename/select?q=*:*&AuthenticatedUserName=username@domain