概要
バージョン
本記事は、Drupal7の実施で実施した内容です。
説明する内容
以下の制御を既存モジュールと管理画面の設定のみで実現します。
・権限によってViewsモジュールを利用した記事一覧の表示制御方法
・権限によって記事の登録・編集可否の制御方法
権限
今回は4パターンを想定して説明します。
すべてログイン済みのユーザーとします。
No | 権限 | テストユーザー |
---|---|---|
1 | 全ての記事の閲覧、編集ができる。 | user01 |
2 | 全ての記事の閲覧ができる。 | user02 |
3 | 所属するグループユーザーが投稿した記事の閲覧・編集ができる。 | user03 |
4 | 所属するグループユーザーが投稿した記事の閲覧ができる。 | user04 |
テストユーザーについては、
説明の中でそれぞれ、該当の権限を付与したユーザーを用意します。
手順
モジュールの準備
今回必須のモジュールです。
Views
Content Access
Organic groups
このモジュールが必要としている他のモジュールも導入、有効にします。
記事一覧の作成
Viewsモジュールでサクッと記事一覧を作ります。
今回の設定はこちら
1つだけ投稿した直後の記事一覧画面です。
全記事に対する制御
まず、2つの権限制御について説明します。
No | 権限 | テストユーザー |
---|---|---|
1 | 全ての記事の閲覧、編集ができる。 | user01 |
2 | 全ての記事の閲覧ができる。 | user02 |
権限と役割
ユーザーの役割を2つ追加します。
- editor
- viewer
editorが全ての記事の閲覧、編集ができる user01、
viewerが全ての記事の閲覧ができる user02 と付与するつもりで進めます。
それぞれの有効にした権限は以下の通りです。
viewerで有効にした権限 |
---|
Access administration menu |
コンテンツの概要ページを確認 |
公開されたコンテンツを読む |
管理ページとヘルプを利用 |
editorで有効にした権限 |
---|
Access administration menu |
テキストフォーマット Filtered HTML を使用 |
コンテンツの概要ページを確認 |
公開されたコンテンツを読む |
管理ページとヘルプを利用 |
コンテンツアクセス制御を迂回する |
※上記以外にnodeのコンテンツタイプ=記事の編集と削除の権限も有効にしています。
ユーザーの準備
user01とuser02を準備します。
user01には権限:editor
user02には権限:viewerを付与しました。
Content Accessモジュールの設定
メニューから
サイト構築 > コンテンツタイプ > 記事 のページを表示します。
Content Accessモジュールが有効になっていると、Access controlのタブが表示されます。
Access controlタブのページを表示して、ユーザーの権限ごとに設定します。
設定の一例がこちら
editorにはすべての記事(article)に対して閲覧、編集、削除出来るように、
一方でviewerには、閲覧権限のみできるように設定しました。
最後のSubmitボタンのクリックで設定完了です。
結果
ここまでの設定によりuser01とuser02で、
記事一覧の表示内容が変わっています。
user01(全ての記事の閲覧、編集ができる。 )
こちらは、編集権限があるので、記事の行に編集ボタンが表示されます。
記事詳細でも編集タブが表示されます。
user02(全ての記事の閲覧ができる。 )
こちらは、閲覧権限しかないので、編集ボタンが表示されません。
記事詳細に編集タブは無しです。
グループによる制御
ここからユーザーが所属するグループを追加して、
所属ごとの表示・編集制御を行います。
No | 権限 | テストユーザー |
---|---|---|
3 | 所属するグループの記事の閲覧・編集ができる。 | user03 |
4 | 所属するグループの記事の閲覧ができる。 | user04 |
準備
1.グループに所属するユーザー用に、別の権限・役割を当てておきます。
- group member
権限の内容は「editor」と同様に設定します。
※ コンテンツアクセス制御を迂回するはチェックを外してください。
- Content Accessモジュールの設定
Content Accessの設定で
「group member」にも「editor」と同じ権限を付与します。
(権限の制限はグループの設定で絞り込んでいきます)
グループの作成と設定(Organic groupsモジュールの設定)
ここからOrganic groupsモジュールを利用していきます。
まずコンテンツタイプ「グループ」を追加します。
(サイト構築 > コンテンツタイプ > コンテンツタイプの追加)
ポイントは、Organic groupsの設定を有効にすることです。
図の赤枠の箇所です。
これでノード(コンテンツタイプ=group)とOrganic groupsが紐づきました。
コンテンツタイプ=groupでグループ(Aグループ,Bグループ)を作成します。
グループとユーザー/グループと記事の紐付
環境設定 > Organic groups > OG field settings の画面を表示して、
ユーザー <-> グループ
記事 <-> グループ
この2つの関連性を登録します。
Bundles = 記事、Fields = Groups audience で登録
Bundles = ユーザー、Fields = Groups audience で登録
2つとも登録した結果↓
カスタムフィールド追加
ユーザーのカスタムフィールドにグループを追加します。
(管理 > 環境設定 > ユーザー > アカウントの設定 > フィールドの管理)
ENTITY SELECTION は、先ほど追加したグループを選択します。
(編集の画面で表示されます)
この設定でユーザー登録・編集時にグループの紐付が出来るようになります。
記事も同様にカスタムフィールドを追加します。
この設定で記事登録時にグループが指定できるようになります。
Organic groupsでの権限設定
グループに所属するユーザーに対して、
通常の権限・役割とは別に権限を上書きで与えることができます。
この設定を行います。
環境設定 > Organic groups > OG roles overview の画面で、登録した「グループ」行の編集をクリック。
この画面で2つのグループ内権限を追加します。
- editor member
- viewer member
設定内容は、下記の画像を見てください。
editor memberには、記事の閲覧、編集ができるように、
viewer memberには、記事の閲覧ができるように権限を付与します。
また、NON-MENBERにもコンテンツ内の表示権限は与えてあげてください。
これが完了したら、ユーザーにグループ内権限を付与します。
グループのコンテンツの編集画面にグループタブが登場しています。
ユーザーの画面で、権限が追加できます。
user03にはeditor memberを、user04にはviewer memberを付与します。
記事の投稿
テストデータとして、Aグループの記事とBグループ記事を投稿します。
記事一覧(Views)の追加設定
この項目で最後です。
今までの設定もほぼOKなのですが、
記事一覧でグループ設定のない記事がuser03とuser04に見えてしまいます。
そこで、記事一覧のViews設定を追加します。
AdvancedのCONTEXTUAL FILTERSで、
記事に追加したグループのカスタムフィールドを選択し、次の画面へ。
記事のグループ値を元に絞り込みをします。
Provide default value でPHPコードを選択して、以下のコードを記入。
global $user;
if(in_array('group member', $user->roles)){
$r = og_get_groups_by_user($user);
return empty($r['node'])? '' : implode(',',array_values ($r['node']));
}
return 'all';
画面の下の方の「続き」リンクを開いて、
Allow multiple valuesにもチェックを付ける。
この設定を保存すると・・・記事のグループに所属する人だけ、グループの絞り込み条件がつくので
自グループの記事だけ表示されるようになります。
結果
user01~user04まで
user01(全ての記事の閲覧、編集ができる。 )
user02(全ての記事の閲覧ができる。 )
user03(所属するグループの記事の閲覧・編集ができる。 )
user04(所属するグループの記事の閲覧ができる。)
長かったですね!
でも覚えれば全然時間はかからないと思います。(たぶん!)
もっと簡単な方法があったらた教えてください。
お疲れ様でした。