Override Node Options
ノードの公開オプションと作成者情報フィールドに対するきめ細かな権限を提供し、管理者以外のユーザーが特定のノードオプションを制御できるようにします。
override_node_options
インストール
composer require 'drupal/override_node_options:8.x-2.9'
composer require 'drupal/override_node_options:8.x-2.6'
概要
Override Node Optionsモジュールは、Drupalの権限システムを拡張し、ノードの追加/編集フォームにある「作成者情報」と「公開オプション」フィールドセット内のフィールドに対するきめ細かなアクセス制御を提供します。デフォルトでは、Drupalはこれらのオプションへのアクセスを「ノードの管理」権限を持つユーザーに制限していますが、この権限は広範な管理機能を付与します。
このモジュールは、サイト構築者がエディターに特定のノードオプション(公開ステータスや先頭固定設定など)の限定的な制御権を与えつつ、完全なノード管理アクセスを付与せずに済ませたいという一般的な問題を解決します。各ノードオプションに対して専用の権限を作成し、それらを独立してロールに割り当てることができます。
このモジュールは2つの権限モードをサポートしています:すべてのコンテンツタイプに適用される一般権限と、よりきめ細かな制御のためのコンテンツタイプ固有の権限です。両方のモードを同時に有効にでき、「すべてのエディターがあらゆるコンテンツで先頭固定ステータスを設定できる」と「ブログエディターのみがブログ記事の作成者を変更できる」といった柔軟な権限設定が可能です。
Features
- 公開ステータスフィールドのきめ細かな権限 - 完全な管理者アクセスなしでコンテンツの公開/非公開を制御できるユーザーを管理
- フロントページへの昇格オプションのきめ細かな権限 - 特定のロールがコンテンツをフィーチャーできるように許可
- リストの先頭に固定オプションのきめ細かな権限 - 先頭固定設定をコンテンツエディターに委任
- 新しいリビジョンを作成チェックボックスのきめ細かな権限 - リビジョン作成の可否を決定できるユーザーを制御
- リビジョンログメッセージフィールドのきめ細かな権限 - エディターが変更を文書化できるように許可
- 作成者フィールドのきめ細かな権限 - コンテンツの作成者を変更できるユーザーを制御
- 作成日フィールドのきめ細かな権限 - 作成日を変更できるユーザーを制御
- すべてのコンテンツタイプに一度に適用される一般権限のサポート
- バンドルごとのきめ細かな制御のためのコンテンツタイプ固有の権限のサポート
- コンテンツの一括公開/非公開のためのViews Bulk Operationsとの互換性
- インターフェースベースのアクセスオーバーライドシステムによるクリーンなアーキテクチャ
Use Cases
管理者アクセスなしでエディターがコンテンツを公開できるようにする
コンテンツエディターが自分のコンテンツを公開する必要があるが、完全な「ノードの管理」権限を持つべきではない一般的なシナリオです。モジュールを有効にし、エディターロールに「すべての公開オプションをオーバーライド」(またはコンテンツタイプ固有のバリアント)を割り当てます。エディターは他の管理機能にアクセスせずに公開チェックボックスを切り替えられるようになります。
先頭固定/昇格の決定をコンテンツマネージャーに委任する
サイトにはフロントページに表示するコンテンツや先頭に固定するコンテンツを決定すべきコンテンツマネージャーがいます。コンテンツマネージャーロールに「すべてのフロントページへの昇格オプションをオーバーライド」と「すべての先頭固定オプションをオーバーライド」権限を割り当てます。より広範な管理アクセスなしでコンテンツをフィーチャーできるようになります。
コンテンツタイプごとにリビジョン作成を制御する
異なるコンテンツタイプには異なるリビジョン要件があります。厳密なリビジョン追跡が必要な記事コンテンツの場合、エディターにリビジョンオーバーライド権限を付与しません。シンプルな基本ページコンテンツの場合、「基本ページのリビジョンオプションをオーバーライド」を付与して、エディターがリビジョンを作成するかどうかを決定できるようにします。これにより、必要な場所で監査証跡を維持しながら柔軟性を提供します。
コンテンツ概要からの一括公開/非公開を許可する
コンテンツ概要ページと組み合わせると、適切な公開オプション権限を持つユーザーは一括操作を使用して複数のノードを一度に公開または非公開にできます。これはモジュールのBulkFormTestでテストされており、Views Bulk Operationsで動作します。
特定のロールがコンテンツの作成者を変更できるようにする
一部のワークフローでは、ある人がドラフトコンテンツを作成し、別の人が作成者としてクレジットされます。作成者フィールドの変更を許可するには「[タイプ]の作成者オプションをオーバーライド」を付与します。これはゴーストライティングのシナリオやコンテンツの帰属を移行する場合に便利です。
インポートまたは移行された記事のコンテンツをバックデートする
コンテンツをインポートしたり、過去の記録を再構築したりする際、エディターは正確な作成日を設定する必要がある場合があります。作成日フィールドの変更を許可するには「[タイプ]の作成日オプションをオーバーライド」を付与します。
Tips
- 一般権限と個別権限は同時に有効にできます。ユーザーが「すべての公開オプションをオーバーライド」と「記事の公開オプションをオーバーライド」の両方を持っている場合、どちらの権限でもアクセスが許可されます - OR論理で動作します。
- 権限は既存のコンテンツタイプに基づいて動的に生成されます。新しいコンテンツタイプを作成した後、キャッシュをクリアせずにその個別権限がすぐに利用可能になります。
- 「ノードの管理」権限を持つユーザーはすべてのオーバーライドチェックをバイパスし、すべてのノードオプションに完全にアクセスできます。このモジュールは、その権限を持つべきではないユーザー専用です。
- このモジュールはノードの追加/編集フォームにのみ影響します。他のエンティティタイプの権限を作成したり、ノード自体へのアクセス(表示/編集/削除)に影響したりしません。
- Views Bulk Operationsを使用する場合、ユーザーが実行する必要がある一括アクションに対して適切な権限を持っていることを確認してください。公開オプション権限は「公開」と「非公開」の両方の一括アクションを許可します。
Technical Details
Admin Pages 1
/admin/config/content/override-node-options
モジュールが生成する権限のタイプを設定します。一般権限(すべてのコンテンツタイプに適用)および/またはコンテンツタイプ固有の権限(コンテンツタイプごとに1セット)を有効にできます。変更は即座に反映され、権限ページで利用可能な権限に影響します。
権限 14
Hooks 2
hook_form_alter
ユーザーの権限に基づいてノードフォームのリビジョンチェックボックスへのアクセスを付与するために使用されます
hook_entity_field_access_alter
status、promote、sticky、uid、created、revision_logなどのノードフィールドに対するフィールドレベルのアクセスをオーバーライドするために使用されます
Troubleshooting 4
/admin/config/content/override-node-optionsでモジュール設定を確認してください。「一般権限」または「個別権限」(または両方)のチェックボックスが有効になっていることを確認してください。これらの設定を変更した後、サイトキャッシュをクリアしてください。
ユーザーが「ノードの管理」権限を持っていないことを確認してください。モジュールのアクセスチェックはその権限がない場合にのみ適用されます。また、フィールドが表示モード設定によって非表示になっていないことも確認してください。
モジュール設定で「個別権限」が有効になっていることを確認してください。権限はNodeType::loadMultiple()から動的に生成されるため、既存のすべてのコンテンツタイプに対して表示されるはずです。drush crでキャッシュをクリアしてみてください。
ユーザーが適切なオーバーライド権限(例:記事を非公開にするための「記事の公開オプションをオーバーライド」)を持っていることを確認してください。モジュールは一括操作で使用されるエンティティアクセスチェックと統合されています。
Security Notes 3
- このモジュールはDrupalの権限システムに従い、すべてのアクセス決定にAccessResultを使用して、適切なキャッシュ可能性とセキュリティを確保しています。
- アクセスチェックは「ノードの管理」権限を持たないユーザーにのみ影響します。その権限を持つユーザーは、オーバーライド権限に関係なく完全なアクセス権を持ちます。
- このモジュールはDrupalのセキュリティアドバイザリポリシーの対象(セキュリティカバレッジ:covered)であり、セキュリティのベストプラクティスについてレビューされていることを示しています。