Publish Content

「コンテンツの管理」権限を必要とせず、コンテンツタイプごとに公開・非公開の詳細な権限設定を可能にします。

publishcontent
16,901 sites
57
drupal.org

インストール

Drupal 11, 10 v8.x-1.7
composer require 'drupal/publishcontent:8.x-1.7'
Drupal 9, 8 v8.x-1.6
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
Publish Content 設定 /admin/config/workflow/publishcontent

UI設定、アカウンタビリティオプション、テキストラベルなど、ユーザーが公開・非公開機能とどのようにやり取りするかを設定します。

権限 11
すべてのコンテンツを公開

コンテンツタイプや所有権に関係なく、すべてのコンテンツを公開できます。

編集可能なコンテンツを公開

ユーザーが編集アクセス権を持つコンテンツを公開できます。

すべてのコンテンツを非公開

コンテンツタイプや所有権に関係なく、すべてのコンテンツを非公開にできます。

編集可能なコンテンツを非公開

ユーザーが編集アクセス権を持つコンテンツを非公開にできます。

Publish Content 設定にアクセス

Publish Content モジュールの設定ページにアクセスできます。

[コンテンツタイプ]:任意のノードタイプを公開

この特定のコンテンツタイプの任意のノードを公開できます。各コンテンツタイプに対して動的に生成されます。

[コンテンツタイプ]:自身のノードタイプを公開

この特定のコンテンツタイプのユーザー自身のノードを公開できます。各コンテンツタイプに対して動的に生成されます。

[コンテンツタイプ]:編集可能なノードタイプを公開

ユーザーが編集できるこのコンテンツタイプのノードを公開できます。各コンテンツタイプに対して動的に生成されます。

[コンテンツタイプ]:任意のノードタイプを非公開

この特定のコンテンツタイプの任意のノードを非公開にできます。各コンテンツタイプに対して動的に生成されます。

[コンテンツタイプ]:自身のノードタイプを非公開

この特定のコンテンツタイプのユーザー自身のノードを非公開にできます。各コンテンツタイプに対して動的に生成されます。

[コンテンツタイプ]:編集可能なノードタイプを非公開

ユーザーが編集できるこのコンテンツタイプのノードを非公開にできます。各コンテンツタイプに対して動的に生成されます。

Hooks 2
hook_publishcontent_publish_access

モジュールが特定のノードの公開へのアクセスを許可または拒否できるようにします。権限チェックの後に呼び出され、ノードのフィールドやその他の条件に基づくカスタムアクセスロジックを可能にします。

hook_publishcontent_unpublish_access

モジュールが特定のノードの非公開へのアクセスを許可または拒否できるようにします。権限チェックの後に呼び出され、ノードのフィールドやその他の条件に基づくカスタムアクセスロジックを可能にします。

Troubleshooting 5
ノードページに公開/非公開タブが表示されない

/admin/config/workflow/publishcontent で「ローカルタスクで公開・非公開を行う」設定が有効になっていることを確認してください。また、ユーザーがそのコンテンツタイプに対する適切な公開/非公開権限を持っていることを確認してください。

ユーザーがステータスチェックボックスを見ることはできるが、変更できない

これは「チェックボックスで公開・非公開を行う」が有効になっているが、ユーザーが公開/非公開権限を持っていない場合の期待される動作です。適切な権限を付与するか、チェックボックスUIオプションを無効にしてください。

ユーザーに権限がないにもかかわらず、新しいコンテンツが公開済みとして作成される

このモジュールは権限のないユーザーが公開ステータスを変更することを防ぎ、ユーザーが公開できない場合は新しいコンテンツをデフォルトで非公開にします。権限が正しく設定されていることを確認してください。

View に公開/非公開リンクが表示されない

コンテンツカテゴリから「公開/非公開」フィールドを View に追加してください。View がコンテンツ(ノード)を表示していることを確認してください(他のエンティティタイプではありません)。

コンテンツを公開してもイベントが発火しない

イベントは Publish Content のトグルルート(/node/{node}/toggleStatus)を使用した場合にのみ発火します。ノード編集フォームを介した公開ではこれらのイベントはトリガーされません。フォームベースの公開変更には hook_entity_presave または hook_entity_update を使用してください。

Security Notes 4
  • このモジュールは Drupal のコアアクセスシステムをバイパスしません - 「編集可能」権限が使用される場合、ユーザーは引き続き編集アクセス権を持っている必要があります。
  • すべての公開/非公開トグルルートで CSRF 保護が適用されています。
  • 動的権限はコンテンツタイプごとに生成され、どのロールがどのコンテンツタイプを公開できるかを細かく制御できます。
  • 「すべてのコンテンツを公開」または「すべてのコンテンツを非公開」を付与する前に慎重に検討してください - これらはすべてのコンテンツタイプに適用される強力な権限です。