Nodeaccess
ノードごとのアクセス制御を提供し、ユーザーロールや特定のユーザーに対して個々のノードの権限(閲覧、編集、削除)を管理できます。
nodeaccess
インストール
composer require 'drupal/nodeaccess:8.x-1.0'
composer require 'drupal/nodeaccess:8.x-1.1'
概要
Nodeaccessは、サイト管理者がロールやユーザーごとにノード単位で権限を管理できるようにします。サイト全体に適用される標準的なDrupal権限とは異なり、このモジュールはタクソノミー分類を必要とせずに機能する、きめ細かいノード単位のアクセス制御を実装します。
このモジュールを使用すると、個々のノードへのアクセスを制限し、ユーザーやロールごとに各ノードの閲覧、編集、削除の権限を割り当てることができます。有効化すると、ノードページに「Grants」タブが表示され、その特定のノードの権限を設定できます。
モジュールはhook_node_access_records()とhook_node_grants()を通じてDrupalのノードアクセスシステムと深く統合されており、3つのアクセス領域を提供します:nodeaccess_role(ロールベースのアクセス用)、nodeaccess_user(ユーザー固有のアクセス用)、nodeaccess_author(作成者ベースのアクセス用)。
Features
- ロールと個々のユーザーに対する閲覧、編集、削除権限を持つノード単位のアクセス制御
- コンテンツタイプごとに設定可能な作成者ベースの権限
- 表示名エイリアスと重み順序付けによる、ノードGrantsタブでのロール表示の設定
- 新しいノードに適用されるコンテンツタイプごとのデフォルト権限
- 特定のユーザーロールへのGrant管理の委譲を可能にするコンテンツタイプごとの権限
- コンテンツタイプごとにGrantsタブの表示/非表示を設定可能
- オートコンプリート(ユーザープロファイルへのアクセス権がある場合)とユーザーID入力の両方をサポートするGrantsタブでのユーザー検索機能
- 翻訳の公開状態を適切に処理する多言語コンテンツのサポート
- ロールやコンテンツタイプが作成、更新、削除された際の自動設定更新
Use Cases
特定のページを特定のユーザーに制限
複雑なタクソノミーベースのアクセスルールを作成せずに、特定のノードへのアクセスを特定のユーザーに制限する必要がある場合にNodeaccessを使用します。コンテンツタイプのGrantsタブを有効にし、制限された各ノードのGrantsタブで匿名ユーザーと認証済みユーザーのロールから閲覧アクセスを削除し、特定のユーザーまたはカスタムロールにのみ閲覧アクセスを付与します。
編集者によるコンテンツアクセス制御
コンテンツ編集者が自分のコンテンツにアクセスできるユーザーを制御できるようにします。「nodeaccess grant [type] permissions」を持つ「編集者」ロールを作成し、そのコンテンツタイプのGrantsタブを有効にすると、編集者はGrantsタブを通じて自分のコンテンツのアクセスを管理できます。
公開前の作成者専用コンテンツ
作成者が常に自分のコンテンツを編集できるが、他のユーザーは未公開の下書きを見ることができないようにコンテンツタイプを設定します。コンテンツタイプ設定で作成者権限にgrant_view、grant_update、grant_deleteを設定し、ロール権限は制限したままにします。
プライベートコンテンツタイプ
デフォルトで作成者と管理者のみがアクセスできるプライベートコンテンツタイプを作成します。コンテンツタイプ設定ですべてのロール権限をチェックせず、作成者の閲覧/編集/削除権限を有効にします。作成者はGrantsタブを使用して選択的にアクセスを共有できます。
チームベースのコンテンツアクセス
異なるチーム用のロール(例:「マーケティングチーム」、「開発チーム」)を作成し、Nodeaccessを使用してチーム全体にコンテンツアクセスを付与します。Grantsタブでこれらのロールを有効にすると、編集者はノードごとにチームアクセスを割り当てることができます。
Tips
- Nodeaccessをインストールする前にデータベースをバックアップしてください。コンテンツアクセスの動作が大幅に変わります
- 標準的なDrupal権限をエミュレートするには、各コンテンツタイプで匿名ユーザーと認証済みユーザーに閲覧権限を付与してください
- ユーザーGrantsはロールGrantsに加算されます - ユーザーはロールまたは個別のユーザーGrantのいずれかがアクセスを許可している場合にアクセスを取得します
- コンテンツタイプ設定の作成者権限は個々のノードでオーバーライドできません - 常にノード作成者に適用されます
- ロールのマシン名が技術的な場合は、「表示名」機能を使用してGrantsタブにユーザーフレンドリーなロール名を表示してください
- 個々のユーザーに権限を付与する際は、「保持?」チェックボックスをチェックすることを忘れないでください。チェックしないとユーザーは保存時に削除されます
Technical Details
Admin Pages 2
/admin/config/people/nodeaccess
ノードGrantsタブに表示されるロール、各コンテンツタイプのデフォルト権限、利用可能なGrant操作など、グローバルなNodeaccess設定を構成します。
/node/{node}/grants
特定のノードのアクセス権限を設定します。選択したロールと個々のユーザーに対して閲覧、編集、削除の権限を設定できます。
権限 3
Hooks 8
hook_node_access_records
ノードのアクセスレコードを提供します。ノード固有の設定(nodeaccessテーブルから)またはコンテンツタイプのデフォルト(nodeaccess.settingsから)に基づいて、ロール、ユーザー、作成者のGrantsを返します。
hook_node_grants
ユーザーアカウントのGrant IDを提供します。ユーザーのロールをnodeaccess_role Grant IDにマッピングし、nodeaccess_userおよびnodeaccess_author領域用のユーザーIDを提供します。
hook_node_type_insert
新しいコンテンツタイプを、すべてのロールと作成者に対するデフォルト(アクセスなし)権限でNodeaccess設定に自動的に追加します。
hook_node_type_delete
削除されたコンテンツタイプをNodeaccess設定から削除します。
hook_node_delete
ノードが削除されたときに、nodeaccessテーブルからノード固有のGrantsを削除します。
hook_user_role_insert
新しいロールをmap_rid_gid、roles_settings、bundles_roles_grantsを含むNodeaccess設定に追加します。
hook_user_role_update
ロールラベルが変更されたときにNodeaccess設定のロール表示名を更新します。
hook_user_role_delete
削除されたロールをすべてのNodeaccess設定から削除します。
Troubleshooting 5
これは想定された動作です。Nodeaccessを有効にした後、設定ページ(/admin/config/people/nodeaccess)で権限を設定する必要があります。標準的なDrupalの動作をエミュレートするには、最低限、各コンテンツタイプで匿名ユーザーや認証済みユーザーに閲覧権限を付与してください。
Nodeaccess設定でそのコンテンツタイプの「このコンテンツタイプでGrantタブを表示」が有効になっているか確認してください。また、ユーザーが「administer nodeaccess」権限またはそのコンテンツタイプの特定の「nodeaccess grant [type] permissions」を持っているか確認してください。
Drupalのアクセスシステムは加算式です。ユーザーがロールを通じてアクセス権を持っている場合、その個々のユーザーからそれを取り消すことはできません。例えば、認証済みユーザーが編集権限を持っている場合、特定の認証済みユーザーから編集アクセスを削除することはできません。
Nodeaccess設定ページで設定を変更すると、ノードアクセスは自動的に再構築のフラグが立てられます。変更がまだ適用されない場合は、/admin/reports/status/rebuildでノードアクセスの再構築を手動で実行してください。
管理者ユーザーは設計上、すべてのノードアクセス制限をバイパスします。これはDrupal Coreの動作であり、Nodeaccessでオーバーライドすることはできません。
Security Notes 5
- このモジュールを有効にすると、権限が設定されるまでコンテンツにアクセスできなくなります - 本番サイトで有効にする前にアクセスルールを計画してください
- 管理者ユーザーは常にノードアクセス制限をバイパスするため、このモジュールを使用して制限することはできません
- 「administer nodeaccess」権限はすべてのアクセスルールの変更を許可するため、信頼できる管理者に限定してください
- コンテンツタイプにロールの編集または削除権限を付与すると、特定のノードでオーバーライドしない限り、そのタイプのすべてのノードに影響します
- より良いアクセス制御の委譲のために、「grant node permissions」ではなくコンテンツタイプ固有の「nodeaccess grant [type] permissions」の使用を検討してください