Omeka Sで非公開ファイルを扱う
概要
Omeka Sでは、リソース(アイテムセット、アイテム、メディアなど)単位で公開/非公開の設定を行うことができますが、メディア等に紐づけられた画像などのファイルについては、非公開の設定が適用されていても、ファイルのURLを知っていれば誰でもアクセスすることができます。通常、以下のようなURLになります。
<Omekaのインストールディレクトリ>/files/original/<ハッシュ値>.jpg
メディアに非公開の設定が適用されていれば、このファイルのURLが知られることは稀かと思いますが、「リンクを知っている全員」がアクセスできてしまう状況を避けたいケースがあります。
上記に対応するモジュールとして、「Access」がありました。
本記事では、本モジュールについて簡単に紹介します。
参考: Drupalの場合
Drupalにおいては、Private filesを使って、上記の問題に対応することができました。この実現にあたっては、以下の記事が参考になりました。
ファイルをPrivate filesとして登録し、 Access Content や Field Permissions モジュールと組み合わせて、匿名ユーザによるPrivate filesへのアクセスを制限することができました。
Accessモジュールの使い方
本モジュールはIPアドレスによるアクセス制御や Guest モジュールとの組み合わせによる匿名ユーザによるアクセス制御など、多様な設定を行うことができるようです。
今回は、単純な設定として、original(オリジナル)およびlarge(オリジナルより小さいサイズの画像)、medium(ラージよりも小さい画像)などについて、匿名ユーザはoriginalおよびlargeの画像は閲覧できないが、medium以下の画像は閲覧できるようにしてみます。
つまり、非ログインユーザは、大きな画像は閲覧できないが、比較的小さな画像のみ閲覧できる環境を構築します。
インストール
通常の方法でインストールできます。
ウェブサーバの設定
この点が少し面倒かもしれません。以下に記載があります。
以下、Apacheの例ですが、.htaccessファイルのRewriteEngine Onに後に、以下を追記します。
# Set rule for original and selected derivative files (usually at least large thumbnails).
RewriteRule "^files/(original|large)/(.*)$" "/access/files/$1/$2" [P]
上記は、ドメインまたはサブドメインのルートにOmeka Sがインストールされている場合です。その他の方法でインストールされた場合の設定例についても、上記のマニュアルに記載されています。
上記により、<Omekaのインストールディレクトリ>/files/original/<ハッシュ値>.jpgなどにアクセスすると、<Omekaのインストールディレクトリ>/access/files/original/<ハッシュ値>.jpgというURLに書き換えられます。
書き換えられた後のURLはOmeka Sが動的に作成するもので、IPアドレスやログイン状態などを考慮して、画像を返却するかを決定するようです。
先に紹介したDrupalにおいては、Public filesがファイルが格納されているパス、Private filesがDrupalが動的に生成するURLになるようなので、このような切り替えをOmeka Sでも実現していることになります。
設定
モジュールのインストール後、以下のような設定画面が表示されます。今回の用途では、全てのチェックを外しておきます。

本モジュールを有効にすることにより、リソースごとにAccess levelを設定できるようになります。今回の用途では、禁止を与えます。

「いらすとや」さんの画像を利用しています。Access statusがforbiddenになっていますが、ログインユーザは当該画像を閲覧できています。

一方、非ログインユーザで画像を閲覧した際には、鍵のアイコンが表示されるようになりました。オリジナル画像等にアクセスできていないことが確認できます。


なお、上記の画面の下部の小さい画像は表示されています。これはmediumを正方形にしたsquareファイルです。largeよりも小さい画像で、先ほどのRewriteルールに引っかからないため、通常通りに表示されています。
参考
Amazon S3モジュールなどを使って、Amazon S3にファイルを格納している場合、2024-01-14時点ではうまくいきませんでした。これは以下のTODOに記載がありますが、オリジナルファイルのURLが変わってしまうためです。
Drupalの場合、以下の記事など参考に設定することで、S3に格納したPrivate filesでも正しく動作しました。
Omeka Sは公開を主眼としたシステムであるため、非公開ファイルの取り扱いはDrupalに比べて苦手なようです。これらの特徴を踏まえて、用途に応じて適切なCMSを選択していくのがよいように思いました。
まとめ
Omeka Sで非公開ファイルを扱う一例について紹介しました。他にも様々な設定が可能なようなので、改めて調べてみたいと思います。
他の方の参考になりましたら幸いです。
Discussion