Flexible permissions

複数のソースからパーミッションを収集、計算、キャッシュするためのフレームワークを提供し、DrupalサイトでのPolicy Based Access Control(PBAC)を実現します。

flexible_permissions
12,260 sites
26
drupal.org

インストール

Drupal 11, 10 v2.0.1
composer require 'drupal/flexible_permissions:^2.0'
Drupal 9 v1.1.0
composer require 'drupal/flexible_permissions:^1.1'

概要

Flexible Permissionsモジュールは、複数のソースからパーミッションを収集できる集中型のパーミッション計算およびキャッシュシステムを提供します。パーミッション計算機のチェーンを利用することで、時間、コンテキスト、メンバーシップステータスなど、あらゆる条件に基づいてパーミッションを変化させることができる高度なPolicy Based Access Control(PBAC)を実現します。

このモジュールは「スコープ」という概念を導入しており、パーミッションをどこでチェックすべきかを決定します。標準のDrupalパーミッションは「default」スコープで動作しますが、実装によってカスタムスコープを定義できます。例えば、Groupモジュールは「group_outsider」「group_insider」「group_individual」などのスコープを定義し、メンバーシップステータスに基づいて異なるパーミッション処理を行います。

キャッシュレイヤーはDrupalのVariationCacheを使用してキャッシュのバリエーションをインテリジェントに処理し、営業時間に基づくような動的なパーミッション変更が適切にキャッシュされ提供されるようにします。これにより、優れたパフォーマンスを維持しながら、変化する条件に自動的に適応するコンテキスト依存のパーミッションを実現できます。

注意: このモジュールは現在非推奨です。Drupal 10.3以降ではコアにAccess Policy APIが含まれており、同様の機能を提供します。このモジュールはFlexible PermissionsポリシーをコアのAccess Policy APIポリシーに変換する互換性レイヤーとして引き続き機能します。

Features

  • 異なるコンテキスト(グループごと、ドメインごと、ストアごとなど)に対してパーミッションを定義できるスコープベースのパーミッションシステム
  • 複数の計算機サービスからパーミッションを集約するチェーンパーミッション計算機
  • 初期計算とその後の変更フェーズからなる2段階のパーミッション構築
  • キャッシュコンテキストに基づくキャッシュリダイレクトとバリエーションを処理するVariationCacheを使用したインテリジェントなキャッシュ
  • 最適なパフォーマンスのための永続キャッシュと静的メモリキャッシュの2層キャッシュ
  • 任意のユーザーアカウントのパーミッションを正しく計算しキャッシュするためのアカウント切り替えサポート
  • Drupalコアの Access Policy API(Drupal 10.3以降)との互換性レイヤーとしての統合
  • スコープ内の個別パーミッションチェックをバイパスするためにadminとしてマークできるパーミッションアイテム
  • 安全なパーミッション処理のための不変値オブジェクト(CalculatedPermissions)と変更可能な構築オブジェクト(RefinableCalculatedPermissions)
  • 初期計算フェーズ中のパーミッションの誤削除を防ぐビルドモード保護

Use Cases

時間ベースのアクセス制御

営業時間中のみ編集パーミッションを付与するパーミッション計算機を作成します。計算機は現在時刻をチェックし、平日の午前9時から午後5時の間のみ編集パーミッションを追加します。キャッシュは時間によって自動的に変化し、一日を通して正しいパーミッションを提供します。

グループベースのパーミッション

Groupモジュールで実装されているように、グループとの関係に基づいてユーザーに異なるパーミッションスコープを定義します。アウトサイダー(非メンバー)には1つのパーミッションセット、インサイダー(メンバー)には別のセット、特定の個人にはメンバーシップロールに基づいたカスタムパーミッションを付与できます。

マルチドメインアクセス制御

Domain Accessを使用したマルチサイトインストールでは、現在のドメインに基づいてパーミッションを付与する計算機を作成します。コンテンツエディターは担当ドメインでは完全なアクセス権を持ち、他のドメインでは読み取り専用アクセスになる場合があります。

条件付き管理者アクセス

特定の条件に基づいてスコープ内で管理者権限を付与します。例えば、シニアエディターは閑散期にコンテンツ管理スコープで管理者アクセスを持ち、トラフィックの多い時間帯には自動的に通常のパーミッションに戻る場合があります。

階層化パーミッションシステム

複数のパーミッション計算機を組み合わせて複雑なアクセス制御を構築します。1つの計算機がロールから基本パーミッションを提供し、別の計算機がコンテンツ所有権に基づいてパーミッションを追加し、3つ目がワークフローに基づいて一時的な権限昇格を付与できます。

Tips

  • getPersistentCacheContexts()を常に正しく実装してください - パーミッションが何らかの条件によって変化する場合、その条件はキャッシュコンテキストとして表現される必要があります
  • インターフェースを直接実装するのではなく、PermissionCalculatorBaseを開始点として使用してください
  • 元のalterインターフェースよりもPermissionCalculatorAlterInterfaceV2を優先してください。アカウントとスコープのコンテキストが提供されます
  • ビルドモード中、アイテムは上書きではなくマージされることを覚えておいてください - 既存のアイテムを変更する必要がある場合はalterフェーズを使用してください
  • CalculatedPermissionsItemでisAdminをtrueに設定すると、permissions配列は無視されます - adminアイテムはすべてのパーミッションを持ちます
  • Drupal 10.3以降では、ネイティブのAccess Policiesの使用を検討してください。このモジュールは互換性レイヤーを提供しますが、新しいコードはコアAPIを使用すべきです
  • モジュールはすべての計算済みパーミッションに'flexible_permissions'キャッシュタグを適用し、一括無効化を容易にします

Technical Details

Troubleshooting 5
変更後にパーミッションが更新されない

'flexible_permissions'キャッシュビンをクリアしてください。Drushを使用できます: drush cr、またはプログラムで'flexible_permissions'キャッシュタグを無効化します。

CalculatedPermissionsScopeExceptionがスローされる

計算機がリクエストされたスコープのパーミッションのみを返していることを確認してください。calculatePermissions()メソッド内で誤って異なるスコープ名のアイテムを追加していないかチェックしてください。

異なるユーザーに対してパーミッションが正しく保持されない

パーミッションがユーザーによって異なる場合、getPersistentCacheContexts()メソッドに'user'または適切なユーザー関連のキャッシュコンテキストを含めてください。チェーン計算機はこれを正しく処理するためにアカウント切り替えを使用します。

計算中にアイテムを削除できない

アイテムの削除はビルドモードが無効になった後にのみ許可されます。チェーン計算機はalterフェーズの前に自動的にビルドモードを無効にします。アイテムを削除する必要がある場合は、PermissionCalculatorAlterInterfaceまたはPermissionCalculatorAlterInterfaceV2を実装してください。

モジュールの非推奨警告が表示される

このモジュールはDrupalコアのAccess Policy API(Drupal 10.3以降で利用可能)に置き換えられ非推奨となっています。ネイティブのアクセスポリシーへの移行を検討してください。モジュールは移行期間中、互換性レイヤーとして引き続き機能します。

Security Notes 4
  • getPersistentCacheContexts()をscopeパラメータ以外の条件に依存させないでください。条件付きキャッシュコンテキストは権限昇格の脆弱性につながる可能性があります。
  • 計算内で計算済みパーミッションに依存するキャッシュコンテキストを使用しないでください。無限ループが発生します。
  • alterPermissions()の実装には注意してください - パーミッションの誤った削除や変更は意図しないアクセスにつながる可能性があります。
  • パーミッションシステムを拡張する際は、スコープ内で管理者ステータスを付与することのセキュリティへの影響を常に考慮してください。adminアイテムはすべてのパーミッションチェックをバイパスします。