Organic Groups
メンバー、ロール、権限、グループコンテンツの関連付けを持つグループを作成・管理するための柔軟なAPIを提供します。
og
概要
Organic Groups モジュール(OG)は、ユーザーがサイト上で独自の「グループ」を作成、管理、削除する機能を提供します。各グループにはメンバーを持つことができ、個々のグループメンバーがコンテンツを投稿できるグループホームページを維持します。投稿は複数のグループに送信(クロスポスト)でき、個々のグループコンテンツは必要に応じてメンバーまたは非メンバーと共有できます。
グループメンバーシップはオープン、クローズド、またはモデレート付きにできます。モジュールはDrupalのField APIを活用してコンテンツタイプをグループに関連付けます。つまり、適切なOGフィールドを添付することで、任意のEntityタイプがグループまたはグループコンテンツになることができます。ユーザーは、閲覧権限を持つグループのリストから、コンテンツを関連付けるグループを選択できます。
OGはグループレベルで完全なロールと権限システムを提供し、各グループコンテキスト内で異なるロールに異なる権限を割り当てることができます。これにより、グループ管理者は自分のグループをきめ細かく制御でき、サイト管理者はすべてのグループの監視を維持できます。
Features
- 管理UIまたはプログラムで任意のEntityタイプ/バンドルをグループとして定義
- OG選択ハンドラを持つEntity referenceフィールドを使用してコンテンツをグループに関連付け
- 状態(アクティブ/保留中/ブロック済み)、ロール、メタデータを持つユーザーとグループを接続するフィールド対応のOgMembership Entity
- Drupal coreロールから独立したグループレベルのロールと権限システム
- 3つのメンバーシップ状態:アクティブ(正会員)、保留中(承認待ち)、ブロック済み(アクセス拒否)
- 異なるメンバーシップ階層(例:デフォルト、プレミアム)のための複数メンバーシップタイプのサポート
- 設定可能なグループマネージャーフルアクセス付きの自動グループ作成者メンバーシップ
- プライベートグループ用のオプションの承認ワークフロー付き購読/購読解除機能
- グループ削除時の孤立グループコンテンツ処理(シンプル、バッチ、またはCronメソッド)
- CRUD操作のグループメンバーシップを尊重する厳格なNodeアクセス権限
- ルート、クエリ引数、ユーザーアクセスからのグループコンテキスト解決
- グループ対コンテンツおよびコンテンツ対グループの関係を持つViews統合
- メンバーシップ管理用の一括アクション(承認、ブロック、ブロック解除、削除、ロールの追加/削除)
- 権限、ロール、管理ルートを拡張するためのイベントベースのアーキテクチャ
- グループコンテキスト、メンバーシップ状態、権限、ロール用のCacheコンテキスト
Use Cases
コミュニティグループ
ユーザーが独自のグループを作成・管理できるコミュニティサイトを作成します。各グループには独自のメンバー、コンテンツ、管理者がいます。グループ作成者は自動的に管理者になり、グループのメンバーシップと権限を完全に制御できます。
プロジェクト管理
チームメンバーがタスクとドキュメントで協力するプロジェクトベースのグループを設定します。異なるメンバーシップタイプ(開発者、マネージャー、閲覧者)が異なるアクセスレベルを提供します。マネージャーの承認を必要とする新しいチームメンバーには保留中のメンバーシップ状態を使用します。
教育コース
講師が学生を管理するコースグループを作成します。コースコンテンツは登録した学生のみが閲覧できます。講師はフル管理アクセスを持ち、学生はコースグループ内で課題を閲覧・提出できます。
プライベートワークスペース
購読に承認が必要なプライベートワークスペースを実装します。「deny_subscribe_without_approval」設定を有効にし、非メンバーには「購読」権限のみを付与します。管理者がメンバーシップリクエストを承認してグループのプライバシーを維持します。
マルチテナントプラットフォーム
各テナントが隔離されたコンテンツとユーザーを持つグループであるマルチテナントプラットフォームを構築します。厳格なNodeアクセスを使用して、コンテンツ編集者がテナントグループ内のコンテンツのみを変更できるようにします。
メンバーシップ階層
複数のメンバーシップタイプを使用して階層化されたメンバーシップを実装します。異なるフィールドと有効期限ロジックを持つ「デフォルト」と「プレミアム」のメンバーシップタイプを作成します。プレミアムメンバーはグループ内で追加のロールと権限を受け取ります。
Tips
- Og::createField()メソッドを使用して、モジュールインストール中にプログラムでEntityバンドルにOGフィールドを追加できます。
- og.permissionイベントを購読して、モジュールの機能用のカスタムグループレベル権限を追加できます。
- グループ依存コンテンツをレンダリングする際は、Cacheコンテキスト(og_group_context、og_membership_state、og_permissions、og_role)を使用してください。
- OgMembership Entityはフィールド対応です - 参加理由や有効期限などのメンバー固有のデータを保存するためにメンバーシップタイプにカスタムフィールドを追加できます。
- グループコンテンツをリストする際は、オーディエンスフィールドを直接クエリするのではなく、Viewsリレーションシップ(og_group_to_group_content)を使用してください。
- プライベートグループの場合、メンバーシップリクエストに承認が必要になるように「deny_subscribe_without_approval」設定と慎重な権限設定を組み合わせてください。
- 「group_manager_full_access」が有効な場合、グループマネージャーはフル権限を受け取ります - 所有権の移転が一般的なサイトでは、これを無効にすることを検討してください。
- タイムアウト問題を防ぐために、大量のグループコンテンツを持つサイトではbatchまたはcronの孤立削除メソッドを使用してください。
- og_autocomplete要素はグループコンテキスト対応のEntity参照を提供します - グループコンテンツを参照するカスタムフォームを構築する際に使用してください。
Technical Details
Admin Pages 11
/admin/config/group
設定、ロール、権限設定へのアクセスを提供するOrganic Groupsモジュールのメイン管理ページ。
/admin/config/group/settings
メンバーシップ処理、アクセス制御、孤立コンテンツ管理を含むOrganic Groupsの動作のグローバル設定を構成します。
/admin/config/group/roles
各グループバンドルのロール管理へのリンクを含むすべてのグループタイプを一覧表示する概要ページ。
/admin/config/group/roles/{entity_type_id}/{bundle_id}
特定のグループタイプのOGロールを管理します。ロールはドラッグで並べ替えでき、編集、削除、権限の操作があります。
/admin/config/group/roles/{entity_type_id}/{bundle_id}/add
指定されたグループタイプの新しいOGロールを作成します。
/admin/config/group/permissions
各グループバンドルの権限管理へのリンクを含むすべてのグループタイプを一覧表示する概要ページ。
/admin/config/group/permissions/{entity_type_id}/{bundle_id}
グループタイプ内の各ロールの権限を設定します。権限はプロバイダー(グループ、グループコンテンツ)ごとに整理され、マトリックス形式で表示されます。
/admin/structure/membership-types
OGメンバーシップタイプバンドルを管理します。メンバーシップタイプは、カスタムフィールドを持つ異なるメンバーシップ設定(例:デフォルト、プレミアム)を可能にします。
/admin/structure/membership-types/add
OGメンバーシップ用の新しいメンバーシップタイプバンドルを作成します。
/group/{entity_type_id}/{group}/admin/members
メンバーシップ管理用の一括操作を備えたViewsベースのインターフェースでグループメンバーを表示・管理します。
/group/{entity_type_id}/{group}/admin/members/add/{og_membership_type}
ユーザーを選択してロールを割り当てることで、新しいメンバーをグループに追加します。
権限 1
Hooks 1
hook_og_user_access_alter
モジュールがユーザーのグループレベル権限を変更できるようにします。カスタムロジックに基づいて権限を動的に付与または取り消すために使用できます。
Troubleshooting 6
OG UIモジュールが有効であること、admin/config/group/permissionsで適切なロールに「Subscribe user to group」権限が付与されていること、コンテンツタイプの表示管理でグループタイプフィールドに「Group subscription」フォーマッタが選択されていることを確認してください。
コンテンツタイプのOrganic groupsタブで「Group content」として設定されていることを確認してください。og_group_refフィールドが存在し、ユーザーがターゲットグループに投稿する権限を持っていることを確認してください。
これは「厳格なNodeアクセス権限」が有効な場合に期待される動作です。admin/config/group/settingsでこの設定を無効にするか、ユーザーをグループに追加するか、「administer organic groups」権限を付与してください。
admin/config/group/settingsのOG設定で「Delete orphans」を有効にしてください。適切な削除方法を選択してください(即時の場合はsimple、バックグラウンド処理の場合はcron)。cronメソッドの場合、Cronが定期的に実行されていることを確認してください。
変更後にCacheをクリアしてください。ユーザーがグループ内でアクティブなメンバーシップ(保留中やブロック済みではない)を持っていることを確認してください。admin/config/group/permissionsでユーザーのロールに正しい権限が割り当てられていることを確認してください。
OG設定でグループリゾルバープラグインが正しく順序付けされていることを確認してください。デフォルトの順序は:route_group、route_group_content、request_query_argument、user_accessです。設定変更後にCacheをクリアしてください。
Security Notes 6
- 「administer organic groups」権限はすべてのグループへのフルアクセスを付与します - 信頼できる管理者のみに制限してください。
- 「restrict access」フラグを持つグループレベル権限(「administer group」など)は信頼できるロールにのみ付与してください。
- 「厳格なNodeアクセス権限」が無効な場合、グローバル編集権限を持つユーザーはメンバーシップに関係なくグループコンテンツを変更できます。
- 「subscribe without approval」権限はユーザーが即座にグループに参加できるようにします - パブリックグループにのみ付与してください。
- グループオーナーは常に特定の権限を保持します - グループ所有権を変更する際は所有権の移転が適切に処理されていることを確認してください。
- カスタムのhook_og_user_access_alter()実装は、古いアクセス結果を避けるためにCache依存関係を適切に追加する必要があります。