今回はFessの特徴的な機能の一つでもある、ロールベース検索について紹介していきます。

利用するユーザーによって、表示させたい検索結果が異なる場合があります。そういった際にこのロールベース検索機能を利用すれば簡単に検索結果を分けることができます。

ロールベース検索とは

Fess のロールベース検索とは、認証されたユーザーの認証情報を元に検索結果を出し分ける機能です。

たとえば、営業部ロールを持つ営業担当者Aは検索結果に営業部ロールの情報が表示されるが、営業部ロールを持たない技術担当者Bは検索してもそれが表示されません。 この機能を利用することで、社内のイントラネット環境などでログインしているユーザーの所属する部門別や役職別などに検索を実現することができます。

Fess のロールベース検索はデフォルトでは Fess で管理するユーザー情報を元に検索結果の出し分けを行うことができます。 それ以外にも LDAP や Active Directory の認証情報と連携して利用することもできます。 また、それらの認証システム以外にもロール情報を以下の場所から取得できます。

  1. リクエストパラメータ
  2. リクエストヘッダー
  3. クッキー


利用方法としては、ポータルサーバーやエージェント型シングルサインオンシステムでは認証時に Fess の稼働しているドメインとパスに対してクッキーで認証情報を保存することで、ロール情報を Fess に渡すことができます。 また、リバースプロキシ型シングルサインオンシステムでは Fess へのアクセス時にリクエストパラメータやリクエストヘッダーに認証情報を付加することで、 Fess でロール情報を取得することができます。

このようにさまざまな認証システムと連携することで、ユーザーごとに検索結果を出し分けることができます。

今回は、Fess のユーザー管理機能を用いたロール検索の一例を紹介します。

ロールベース検索の設定

Fess 12.3.1を利用して説明していきます。

FessのZIPファイルはダウンロードページから入手することができます。

ZIPファイルを展開して、bin/fess.[sh|bat]を実行して起動してください。

設定の概要

今回は、営業部(sales)と技術部(eng)の2つのロールを作成します。 ユーザーは以下のように検索結果を表示できるものとします。

  • taroユーザーはsalesロールに属し、検索結果に https://www.n2sm.net/ を表示可能
  • hanakoユーザーはengロールに属し、検索結果に https://fess.codelibs.org/ を表示可能

ロールの作成

まず、管理画面の http://localhost:8080/admin/ にアクセスします。

ユーザー > ロール > 新規作成 から 名前に「sales」と入力し、salesロールを作成します。 同様にengロールも作成します。

ロールの一覧

ユーザーの作成

ユーザー > ユーザー > 新規作成 からtaroユーザーとhanakoユーザーを以下の設定で作成します。

太郎 花子
ユーザー名 taro hanako
パスワード taro hanako
ロール sales eng

登録ユーザーの確認

今回の設定でadmin、taro、hanakoの3つユーザーで Fess にログインできる状態になっています。 順にログインできることを確認してください。

http://localhost:8080/admin/ にアクセスして、adminユーザーでログインすると通常通り管理画面が表示されます。

次にadminユーザーをログアウトします。管理画面右上のボタンをクリックしてください。

ログアウトボタン

ユーザー名とパスワードを入力してtaroやhanakoでログインしてください。 ログインが成功すると、http://localhost:8080/ の検索画面が表示されます。

クロール設定の追加

クロール対象を登録します。 今回は営業部ロールのユーザーはhttps://www.n2sm.net/ だけを検索でき、技術部ロールのユーザーはhttps://fess.codelibs.org/ だけを検索できるようにします。

これらのクロール設定を登録するため、クローラ > ウェブ > 新規作成 をクリックして、ウェブクロール設定を作成してください。

今回は以下のような設定にします。他の設定はデフォルト値にしておきます。

N2SM Fess
名前 N2SM Fess
URL https://www.n2sm.net/ https://fess.codelibs.org/
クロール対象とするURL https://www.n2sm.net/.* https://fess.codelibs.org/.*
最大アクセス数 10 10
間隔 3000ミリ秒 3000ミリ秒
パーミッション {role}sales {role}eng

クロールの開始

クロール設定登録後、システム > スケジューラ > Default Crawler から[今すぐ開始]を押下します。クロールが完了するまでしばらく待ちます。

検索

クロール完了後、http://localhost:8080/ にアクセスして、ログインしていない状態で「fess」などの単語を検索して、検索結果が表示されないことを確認してください。

次にtaroユーザーでログインして、同様に検索してください。 taroユーザーはsalesロールを持つため、https://www.n2sm.net/ の検索結果だけが表示されます。

salesロールでの検索結果

taroユーザーをログアウトして、hanakoユーザーでログインしてください。 先ほどと同様に検索すると、hanakoユーザーはengロールを持つので、https://fess.codelibs.org/ の検索結果だけが表示されます。

engロールでの検索結果

今回はロールによる検索結果の出し分けを紹介しましたが、クローラのパーミッションに「{user}ユーザー名」や「{group}グループ名」と記入することでユーザーやグループごとに検索結果を出し分けることもできます。

*  *  *

Fess のセキュリティー機能の一つであるロールベース検索についてご紹介しました。 Fessへの認証情報の受け渡しは汎用的な実装であるのでさまざまな認証システムに対応できると思います。

ユーザーの属性ごとに検索結果を出し分けることができるので、社内ポータルサイトや共有フォルダなどの閲覧権限ごとに検索が必要なシステムも実現することが可能です。

著者紹介

菅谷 信介 (Shinsuke Sugaya)

Apache PredictionIOにて、コミッター兼PMCとして活動。また、自身でもCodeLibs Projectを立ち上げ、オープンソースの全文検索サーバFessなどの開発に従事。