Publish Content
「コンテンツの管理」権限を必要とせず、コンテンツタイプごとに公開・非公開の詳細な権限設定を可能にします。
publishcontent
インストール
composer require 'drupal/publishcontent:8.x-1.7'
composer require 'drupal/publishcontent:8.x-1.6'
概要
Publish Content モジュールは、コンテンツの公開・非公開を誰が行えるかを細かく制御できる、軽量なコンテンツワークフロー管理ソリューションを提供します。ユーザーに広範な「コンテンツの管理」権限を付与する代わりに、サイト管理者は複数のレベルで公開・非公開の権限を割り当てることができます:すべてのコンテンツに対するグローバル設定、ユーザーが編集可能なコンテンツに対する設定、コンテンツタイプごとの設定、またはユーザー自身のコンテンツに対する設定が可能です。
このモジュールはコンテンツ管理用の便利なUI要素を追加します:ノードページにワンクリックでステータスを切り替えられる公開/非公開タブ(ローカルタスク)、およびオプションでノード編集フォームにチェックボックスを表示できます。また、Views と統合して公開/非公開リンクをコンテンツ一覧に表示できるため、編集ワークフローに最適です。
開発者向けには、アクセスロジックをカスタマイズするためのフックや、コンテンツの公開・非公開時に発行されるイベントを含む堅牢なAPIを提供し、他のワークフローシステムとの統合を可能にします。多言語サポートにより、個々の翻訳の公開ステータスを管理できます。
Features
- コンテンツタイプに関係なく、すべてのコンテンツを公開または非公開にするグローバル権限
- ユーザーが編集アクセス権を持つコンテンツを公開または非公開にする権限
- コンテンツタイプごとの詳細な制御のための権限(例:「記事:任意のノードタイプを公開」)
- コンテンツタイプごとにユーザー自身のコンテンツのみを公開または非公開にする権限
- ワンクリックでステータスを変更できる、ノード表示ページの公開/非公開ローカルタスクタブ(設定可能)
- 公開ステータスをインラインで切り替えられる、ノード編集フォームのオプションチェックボックス
- コンテンツ管理 Views 用の公開/非公開リンクを提供する Views フィールドハンドラ
- 翻訳ごとの公開ステータス管理を含む完全な多言語サポート
- コンテンツの公開/非公開時に自動的にリビジョンを作成するオプション
- すべての公開/非公開アクションを watchdog に記録するロギングオプション
- 公開/非公開アクションのボタンとステータステキストのカスタマイズ可能なラベル
- カスタムアクセスロジック用の開発者向けAPIフック(hook_publishcontent_publish_access、hook_publishcontent_unpublish_access)
- 他システムとの統合用に発行されるイベント(PublishContentPublishEvent、PublishContentUnpublishEvent)
Use Cases
コンテンツ編集者のための編集ワークフロー
コンテンツ編集者に完全な管理者権限を与えずに、編集可能な記事を公開・非公開にする権限を付与します。「編集可能なコンテンツを公開」と「編集可能なコンテンツを非公開」権限を使用します。編集者はレビュー中に公開/非公開タブを使用してコンテンツのステータスをすばやく切り替えることができます。
特定のコンテンツタイプに対する著者の自己公開
著者が自分のブログ投稿を公開できるようにしますが、他のコンテンツタイプは許可しません。著者ロールに「ブログ:自身のノードタイプを公開」権限を割り当てます。著者は編集レビューを待たずに、準備ができたらドラフトを公開できます。
コンテンツモデレーションダッシュボード
未公開コンテンツの View に公開/非公開フィールドを追加して、Views ベースのコンテンツモデレーションダッシュボードを作成します。モデレーターは各ノードを開くことなく、リストから直接承認済みコンテンツをすばやく公開できます。
多言語コンテンツ管理
多言語サイトでは、モジュールを使用して翻訳ごとに公開ステータスを管理します。コンテンツマネージャーは、ドイツ語の翻訳がレビューされるまで非公開のままにしながら、英語版を公開できます。
カスタムワークフロー統合
PublishContentPublishEvent と PublishContentUnpublishEvent をサブスクライブして、カスタムワークフローと統合します。例えば、コンテンツが公開されたときにメール通知を送信したり、コンテンツが非公開になったときに外部システムを更新したりできます。
条件付き公開アクセス
hook_publishcontent_publish_access を実装して、カスタムビジネスロジックを追加します。例えば、アイキャッチ画像がある記事のみ公開を許可したり、現在ホームページで特集されているコンテンツの非公開を防いだりできます。
Tips
- より良いセキュリティのため、可能であれば「すべてのコンテンツを公開」ではなく「編集可能なコンテンツを公開」を使用してください - ユーザーはいずれにせよ編集可能なコンテンツしか公開できません。
- アカウンタビリティとコンテンツ履歴を維持するために、「公開/非公開時に新しいリビジョンを作成」を有効にしてください。
- 監査証跡のために「ログエントリを作成」を有効にしてください。特にコンプライアンス要件があるサイトでは重要です。
- View Unpublished モジュールと組み合わせて、編集者が未公開コンテンツを表示、編集、公開できる完全な編集ワークフローを作成してください。
- Views 統合を使用して公開リンクを表示するコンテンツダッシュボードを作成し、編集ワークフローのクリック数を減らしてください。
- 公開前に特定のフィールドを必須にするなど、ビジネスルールを強制するためにアクセスフックを実装してください。
Technical Details
Admin Pages 1
/admin/config/workflow/publishcontent
UI設定、アカウンタビリティオプション、テキストラベルなど、ユーザーが公開・非公開機能とどのようにやり取りするかを設定します。
権限 11
Hooks 2
hook_publishcontent_publish_access
モジュールが特定のノードの公開へのアクセスを許可または拒否できるようにします。権限チェックの後に呼び出され、ノードのフィールドやその他の条件に基づくカスタムアクセスロジックを可能にします。
hook_publishcontent_unpublish_access
モジュールが特定のノードの非公開へのアクセスを許可または拒否できるようにします。権限チェックの後に呼び出され、ノードのフィールドやその他の条件に基づくカスタムアクセスロジックを可能にします。
Troubleshooting 5
/admin/config/workflow/publishcontent で「ローカルタスクで公開・非公開を行う」設定が有効になっていることを確認してください。また、ユーザーがそのコンテンツタイプに対する適切な公開/非公開権限を持っていることを確認してください。
これは「チェックボックスで公開・非公開を行う」が有効になっているが、ユーザーが公開/非公開権限を持っていない場合の期待される動作です。適切な権限を付与するか、チェックボックスUIオプションを無効にしてください。
このモジュールは権限のないユーザーが公開ステータスを変更することを防ぎ、ユーザーが公開できない場合は新しいコンテンツをデフォルトで非公開にします。権限が正しく設定されていることを確認してください。
コンテンツカテゴリから「公開/非公開」フィールドを View に追加してください。View がコンテンツ(ノード)を表示していることを確認してください(他のエンティティタイプではありません)。
イベントは Publish Content のトグルルート(/node/{node}/toggleStatus)を使用した場合にのみ発火します。ノード編集フォームを介した公開ではこれらのイベントはトリガーされません。フォームベースの公開変更には hook_entity_presave または hook_entity_update を使用してください。
Security Notes 4
- このモジュールは Drupal のコアアクセスシステムをバイパスしません - 「編集可能」権限が使用される場合、ユーザーは引き続き編集アクセス権を持っている必要があります。
- すべての公開/非公開トグルルートで CSRF 保護が適用されています。
- 動的権限はコンテンツタイプごとに生成され、どのロールがどのコンテンツタイプを公開できるかを細かく制御できます。
- 「すべてのコンテンツを公開」または「すべてのコンテンツを非公開」を付与する前に慎重に検討してください - これらはすべてのコンテンツタイプに適用される強力な権限です。