Private Files Download Permission
Drupalのプライベートファイルシステムに対してディレクトリ単位できめ細かなアクセス制御を提供し、管理者がユーザーやロールごとにファイルのダウンロードを制限できるようにします。
private_files_download_permission
概要
Private Files Download Permission(PFDP)は、Drupalのプライベートファイルシステム向けの包括的なアクセス制御モジュールです。Drupalコアの機能における一般的な制限に対処し、プライベートディレクトリからファイルをダウンロードできるユーザーをきめ細かく制御できます。
このモジュールにより、サイト管理者は特定のプライベートファイルシステムディレクトリを定義し、個々のユーザーまたはロールにダウンロード権限を割り当てることができます。各ディレクトリ設定では、そのディレクトリとサブディレクトリ内のファイルにアクセスできるユーザーとロールを指定できます。モジュールはベストマッチアルゴリズムを使用して、指定されたファイルパスに適用するディレクトリ設定を決定します。
追加機能として、ファイル所有者がアップロードしたファイルへのアクセスを自動的に許可する機能、他のモジュールで処理すべきディレクトリのバイパスモード、管理者向けのグローバルバイパス権限があります。また、ユーザーリストのキャッシュや直接ファイル配信のためのオーバーライドモードなど、パフォーマンス最適化オプションも提供しています。
Features
- パスベースのマッチングによるプライベートファイルダウンロードのディレクトリ単位アクセス制御
- 特定のユーザーが定義されたディレクトリからダウンロードできるようにするユーザーベースの権限割り当て
- より広範なアクセス制御のためのロールベースの権限割り当て
- ユーザーが自分でアップロードしたファイルをダウンロードできるファイル所有者アクセス許可
- 他のモジュールやコアで処理すべきディレクトリのバイパスモード
- 管理者および一時ファイル向けのグローバルバイパス権限
- ブラウザでのインライン表示ではなくファイルダウンロードを強制するアタッチメントモード
- より高速なファイル配信のためにDrupalの検証チェーンをスキップするオーバーライドモード
- アクセス判定の詳細ログを記録するデバッグモード
- 多数のユーザーがいるサイトでパフォーマンスを向上させるユーザーリストキャッシュ
- 先頭スラッシュを含む適切な形式を確保するディレクトリパスの自動検証
- 現在のプライベートファイルシステムパスと設定状態を表示する管理インターフェース
Use Cases
特定のロールへのドキュメントダウンロード制限
企業のイントラネットで、HR文書をHRスタッフのみに制限する必要がある場合。「/hr-documents」のディレクトリエントリを設定し、「HRスタッフ」ロールのみを有効にします。他のすべてのユーザーはprivate://hr-documentsディレクトリ内のファイルへのアクセスを拒否されます。
ユーザー自身のアップロードへのアクセス許可
ユーザーが自分だけがアクセスすべきプライベート文書をアップロードするファイル共有サイト。「/」(プライベートファイルシステム全体)のディレクトリエントリを作成し、「ファイル所有者に許可」を有効にして、ユーザーやロールは選択しません。これにより、ファイルのアップローダーだけがそのファイルをダウンロードできるようになります。
部門別ファイルアクセス
複数の部門がそれぞれ独自のプライベートファイルストレージを持つ組織。「/finance」、「/marketing」、「/engineering」などの個別のディレクトリエントリを作成し、各エントリに適切な部門ロールを割り当てます。
VIPコンテンツアクセス
特定の有料会員のみがアクセスできるプレミアムコンテンツ。「/premium-content」のディレクトリを作成し、「有効なユーザー」セクションで個々のユーザーアカウントを選択します(設定で「ユーザー単位のチェックを有効にする」が必要です)。
パブリックとプライベートの混合処理
一部のディレクトリは他のモジュール(MediaやWebformなど)で処理する必要がある場合。それらのディレクトリエントリに「バイパス」オプションを設定して、このモジュールがそれらを無視し、他のモジュールがアクセスを制御できるようにします。
高トラフィックサイトの最適化
多くのユーザーがいてファイルダウンロードが遅いサイト。設定で「オーバーライドモードを有効にする」を有効にして、Drupalの検証チェーンをスキップし、ファイルを直接配信します。また、ユーザー単位のチェックを使用している場合は、「ユーザーリストをキャッシュ」を有効にして管理インターフェースのパフォーマンスを向上させます。
Tips
- ディレクトリパスはベストマッチロジックを使用します:「/documents/confidential」エントリは、confidentialサブディレクトリ内のファイルに対して「/documents」よりも優先されます
- ルートパス「/」はプライベートファイルシステム全体を制御するために使用できます
- MediaやWebformなど他のモジュールで処理すべきディレクトリには「バイパス」オプションを使用します
- ロールベースの権限のみが必要な場合、多くのユーザーがいるサイトでは「ユーザー単位のチェック」を無効にすることを検討してください
- デバッグログには、識別しやすいようにユーザーID、ユーザー名、表示名が含まれます
- オーバーライドモードが有効な場合、hook_file_downloadを実装している他のモジュールはバイパスされます
Technical Details
Admin Pages 5
/admin/config/media/private-files-download-permission
設定されたすべてのプライベートファイルディレクトリとそのアクセス権限のリストを表示するメイン管理ページです。ディレクトリパス、バイパス状態、有効なユーザー、有効なロールを表形式で表示します。各ディレクトリエントリの編集と削除へのリンクを提供します。また、現在のプライベートファイルシステムパスとユーザー単位のチェックが有効かどうかについての情報メッセージも表示します。
/admin/config/media/private-files-download-permission/add
権限制御リストに新しいプライベートファイルディレクトリエントリを追加するフォームです。ディレクトリパス、バイパスオプション、ファイル所有者の許可、およびこのディレクトリからファイルをダウンロードできる特定のユーザーとロールを指定できます。
/admin/config/media/private-files-download-permission/{pfdp_directory}
既存のプライベートファイルディレクトリエントリを編集するフォームです。追加フォームと同じフィールドですが、既存の設定から値が事前入力されています。
/admin/config/media/private-files-download-permission/{pfdp_directory}/delete
権限制御リストからディレクトリエントリを削除するための確認フォームです。エントリを削除しても実際のファイルは削除されず、権限設定のみが削除されます。
/admin/config/media/private-files-download-permission/settings
モジュールのグローバル設定フォームで、管理者がパフォーマンスオプションとダウンロード動作を設定できます。
権限 3
Hooks 1
hook_file_download
プライベートファイルのダウンロードへのアクセスを制御します。これは、設定されたディレクトリ権限に基づいて、現在のユーザーがリクエストされたプライベートファイルをダウンロードする権限を持っているかどうかをチェックするメインのhook実装です。
Troubleshooting 6
モジュール設定で「デバッグモードを有効にする」を有効にし、Drupalログ(レポート > 最近のログメッセージ)でユーザーおよびURIの詳細を含む詳細なアクセス判定情報を確認します。
settings.phpファイルで次のようにプライベートファイルシステムパスを設定します:$settings['file_private_path'] = '/path/to/private/files';
設定 > メディア > ファイルシステムに移動し、デフォルトのダウンロード方法を「Drupalが提供するプライベートローカルファイル」に設定します。
モジュール設定(/admin/config/media/private-files-download-permission/settings)で「ユーザー単位のチェックを有効にする」を有効にします。
モジュール設定で「ユーザーリストをキャッシュ」を有効にして、ディレクトリ編集フォームで使用されるユーザーリストをキャッシュします。
設定で「オーバーライドモードを有効にする」を無効にして、通常のDrupalファイルダウンロード検証チェーンを復元します。
Security Notes 5
- このモジュールはプライベートファイルのダウンロードにのみ影響します - パブリックファイルは制御されません
- 「bypass pfdp」権限はすべてのプライベートファイルへのアクセスを許可するため、高い信頼性のあるロールにのみ付与する必要があります
- オーバーライドモードは他のモジュールのアクセスチェックをスキップするため、セキュリティ上の影響がある可能性があります
- ディレクトリパスのマッチングは大文字小文字を区別しません
- 一致するディレクトリ設定がないファイルはデフォルトで拒否されます