Group
ユーザー、コンテンツ、その他のエンティティをグループ化し、各グループ内できめ細かいパーミッションとアクセス制御を提供する強力なモジュールです。
group
インストール
composer require 'drupal/group:^3.3'
概要
Groupモジュールは、ユーザー、コンテンツ、その他のエンティティのコレクションを作成するための柔軟なシステムを提供します。Organic Groups(OG)とは異なり、Groupは関連するコンテンツとメンバーのコンテナとして機能する専用の「Group」エンティティタイプを作成するという根本的に異なるアプローチを採用しています。
各グループは独自のロールとパーミッションのセットを持つことができ、Drupalのグローバルパーミッションとは独立して動作する高度なアクセス制御が可能になります。ユーザーは複数のグループのメンバーになることができ、各グループで異なるロールを持つことができます。また、設定に応じてコンテンツを1つまたは複数のグループに関連付けることができます。
このモジュールは「Group Relations」と呼ばれるプラグインベースのアーキテクチャを使用しており、さまざまなエンティティタイプをグループに追加する方法を決定します。この拡張可能なシステムにより、開発者は任意のエンティティタイプとのカスタム統合を作成できます。モジュールには、ユーザー用のGroup Membershipプラグインが組み込まれており、Node統合用のGroup Nodeサブモジュールを提供しています。
主な機能には、独自の設定を持つ複数のグループタイプ、柔軟なロールスコープ(Outsider、Insider、Individual)、グループ作成者の自動メンバーシップ、エンティティ関係の設定可能なカーディナリティ、グループのリビジョンサポート、包括的なViews統合が含まれます。
Features
- フィールド、表示モード、リビジョンをサポートする設定可能なグループタイプ(バンドル)を持つカスタムGroupエンティティタイプ
- 3つのスコープを持つ柔軟なグループロールシステム:Outsider(グローバルロールと同期される非メンバー)、Insider(グローバルロールと同期されるメンバー)、Individual(特定のメンバーに手動で割り当て)
- Drupalのグローバルパーミッションとは独立して動作するきめ細かいパーミッションシステム。グループタイプとロールごとにパーミッションを割り当て可能
- メンバーシップごとに複数のロールをサポートし、ユーザーをグループメンバーとして追跡するGroup Membershipシステム
- 設定可能なカーディナリティとアクセス制御により、任意のエンティティタイプをグループに追加できるプラグインベースのGroup Relationsアーキテクチャ
- グループ化されたコンテンツのエンティティアクセス制御 - グループが関連エンティティの閲覧、編集、削除権限を持つユーザーを決定可能
- グループ対応の表示を構築するためのカスタムアクセスプラグイン、引数、リレーションシップハンドラーを備えた組み込みViews統合
- 特定のグループに対して現在のユーザーが利用可能なコンテキスト対応のアクションを表示するGroup operationsブロック
- グループに新しいエンティティを追加し、リレーションシップフィールドが適切に入力されることを保証する作成ウィザード
- 作成者に設定可能なロールを割り当てる自動グループ作成者メンバーシップ
- グループパーミッションに依存するコンテンツの適切なキャッシングのためのCache contextとtag
- グループとグループリレーションシップのTokenサポート
- 自動URLエイリアスのためのPathauto統合(オプション)
Use Cases
プライベートイントラネットの部門
各部門がグループである会社部門用のグループタイプを作成します。部門長は管理者ロールを取得し、一般社員はメンバーになります。部門に追加されたコンテンツは部門メンバーにのみ表示されます。グローバル管理者と同期されたOutsiderロールはすべての部門を管理できます。
オンライン学習クラス
各コースがグループである教育プラットフォーム。講師がグループを作成し、自動的に管理者権限を受け取ります。学生はメンバーとして参加または追加されます。コース資料(Node)はグループに追加され、登録された学生にのみ表示されます。異なるコンテンツタイプは異なるパーミッションルールを持つことができます。
コミュニティ興味グループ
ユーザーが作成する興味グループを持つソーシャルプラットフォーム。ユーザーは任意のトピックでグループを作成し、グループ管理者になります。他のユーザーは興味のあるグループに参加します。グループ管理者はメンバーシップを制御し、モデレーターロールを割り当てることができます。コンテンツはグループコミュニティ内で共有されます。
クライアントポータル
各クライアントが専用グループを持つ代理店ウェブサイト。クライアント担当者は閲覧のみのアクセス権を持つメンバーとして追加されます。代理店スタッフはグローバルロールと同期されたロールを持ち、すべてのクライアントグループに自動的にアクセスできます。クライアント固有のドキュメントとプロジェクト更新は各グループ内で整理されます。
マルチテナントアプリケーション
各テナント/組織がグループであるSaaSアプリケーション。テナント管理者は他のテナントに影響を与えることなく、独自のユーザー、コンテンツ、ロールを管理します。グローバル管理者は必要に応じてすべてのテナントを管理するためのOutsider管理者ロールを持ちます。
Tips
- サイト管理者が個別のメンバーシップなしでグループを管理できるように、グローバル管理者ロールの同期グループロールを常に設定してください。
- グループタイプを作成する際に「Automatically configure useful default roles」オプションを使用して、Anonymous、Outsider、Memberロールを持つ適切な初期設定をセットアップしてください。
- Group Operationsブロックは、参加/退出リンクやその他のグループアクションをユーザーに提供するための推奨される方法です - グループページレイアウトに追加してください。
- 複雑なパーミッション要件の場合、1つのロールですべてを処理しようとするのではなく、異なるスコープを持つ複数のグループロールを使用することを検討してください。
- グループリレーションシップ(メンバーシップ)にフィールドを追加する場合、ユーザーがすべての必須フィールドを入力するように「creation wizard」を有効にしてください。
- 「access content overview」パーミッションは控えめに使用してください - 主にデバッグやパワーユーザーに役立つ技術的なリレーションシップデータを表示します。
- グループパーミッションはDrupalのグローバルパーミッションとは完全に分離されています - グローバルで「administer nodes」を持つユーザーでも、グループ内でNodeを管理するにはグループ固有のパーミッションが必要です。
- /group/[id]/membersのgroup_members Viewは、同じパスを維持しながらカスタマイズしたり、独自のViewに置き換えたりできます。
Technical Details
Admin Pages 12
/admin/group/settings
サイト全体のすべてのグループに影響するGroupモジュールのグローバル設定を構成します。
/admin/group
サイト上のすべてのグループを一覧表示する概要ページ。グループリスト、グループタイプ、モジュール設定にアクセスするためのタブ付きインターフェースを提供します。
/admin/group/types
設定されたすべてのグループタイプのリスト。各グループタイプは、独自の設定、ロール、利用可能なコンテンツプラグインを持つGroupエンティティのバンドルとして機能します。
/admin/group/types/manage/{group_type}
ラベル、説明、グループ設定、作成者設定を含む特定のグループタイプを構成します。
/admin/group/types/manage/{group_type}/permissions
このグループタイプ内のすべてのロールのパーミッションを設定します。パーミッションを付与/取り消すためのチェックボックス付きで、ロール別のパーミッションマトリックスを表示します。
/admin/group/types/manage/{group_type}/roles
このグループタイプのグループロールを管理します。ロールは3つのスコープに分類できます:Outsider(非メンバー用)、Insider(グローバルロールと同期されるメンバー用)、Individual(手動で割り当て)。
/admin/group/types/manage/{group_type}/roles/add
設定可能なスコープとオプションのグローバルロール同期を持つグループタイプ用の新しいロールを作成します。
/admin/group/types/manage/{group_type}/content
Group Relationプラグインのインストールまたは設定により、このタイプのグループに追加できるエンティティタイプを管理します。
/admin/group/content/install/{group_type}/{plugin_id}
グループタイプにGroup Relationプラグインを設定してインストールし、そのエンティティタイプをグループに追加できるようにします。
/group/{group}/members
グループのすべてのメンバーをロール、参加日、操作リンクとともに表示するViews駆動のページ。
/group/{group}/join
「join group」パーミッションを持つユーザーがグループに参加できるセルフサービスフォーム。
/group/{group}/leave
「leave group」パーミッションを持つメンバーがグループを退出できる確認フォーム。
権限 3
Hooks 1
hook_group_operations_alter
モジュールが特定のグループのGroup Operationsブロックに表示されるリンクを変更できるようにします。
Troubleshooting 6
設計上、Drupalユーザー1は自動的にグループアクセス権を持ちません。グローバル管理者ロールと同期されたOutsiderおよびInsiderグループロールを作成し、それらを管理者ロールとしてマークしてください。これにより、グローバル管理者ロールを持つユーザーにフルアクセスが付与されます。
グループタイプを編集し、「The group creator automatically becomes a member」を有効にしてください。次に、「Group creator roles」を設定して、作成者に1つ以上のロール(必要に応じて管理者ロールを含む)を割り当ててください。
Group Relationプラグインで「entity_access」が有効になっていることを確認してください(プラグインのアノテーション/attributeを確認)。gnodeの場合、これはデフォルトで有効です。また、ユーザーがグループ内のそのエンティティタイプに対する適切な表示/更新/削除パーミッションを持っていることを確認してください。
すべてのキャッシュをクリアしてください。グループパーミッションはuser.group_permissions Cache contextを使用した高度なキャッシングを使用します。「drush cr」を実行すると、ほとんどのキャッシュ問題が解決されます。
まず、適切なGroup Relationプラグインがグループタイプにインストールされていることを確認してください(管理 > Groups > Group types > [タイプ] > Content)。次に、ユーザーがグループ内で「create [plugin] relationship」パーミッションを持っていることを確認してください。
「Anonymous user」グローバルロールと同期されたOutsiderスコープのグループロールを作成してください。「view group」およびその他の必要なパーミッションをこのロールに付与してください。
Security Notes 6
- 「administer group」パーミッションはすべてのグループ設定の完全な制御を付与します。完全に信頼できる管理者にのみ付与してください。
- 管理者グループロールは、他のメンバーを管理する能力を含め、そのグループタイプ内のすべてのパーミッションを持ちます。慎重に割り当ててください。
- デフォルトでは、グループ作成者は設定されない限り特別なパーミッションを持ちません。これはセキュリティのために意図的です - 作成者ロールを明示的に設定してください。
- エンティティアクセス制御(有効な場合)は、Drupalの標準エンティティアクセスの代わりではなく、追加として動作します。ユーザーがコンテンツにアクセスするには、両方がアクセスを許可する必要があります。
- Anonymousユーザーグローバルロールと同期されたOutsiderロールは、グループへの非認証アクセスを許可します - これらのロールのパーミッションは慎重に設定してください。
- グループメンバーシップとロールはコンテンツエンティティとして保存され、GDPRなどの規制の下でデータプライバシーの考慮対象となります。