Drupal 閲覧・編集権限を既存モジュールで設定する

  • 9
    Like
  • 0
    Comment
More than 1 year has passed since last update.

概要

バージョン

本記事は、Drupal7の実施で実施した内容です。

説明する内容

以下の制御を既存モジュールと管理画面の設定のみで実現します。

・権限によってViewsモジュールを利用した記事一覧の表示制御方法
・権限によって記事の登録・編集可否の制御方法

権限

今回は4パターンを想定して説明します。

すべてログイン済みのユーザーとします。

No 権限 テストユーザー
1 全ての記事の閲覧、編集ができる。 user01
2 全ての記事の閲覧ができる。 user02
3 所属するグループユーザーが投稿した記事の閲覧・編集ができる。 user03
4 所属するグループユーザーが投稿した記事の閲覧ができる。 user04

テストユーザーについては、
説明の中でそれぞれ、該当の権限を付与したユーザーを用意します。

01_権限前提.png

手順

モジュールの準備

今回必須のモジュールです。

  • Views

  • Content Access

  • Organic groups

このモジュールが必要としている他のモジュールも導入、有効にします。

記事一覧の作成

Viewsモジュールでサクッと記事一覧を作ります。

今回の設定はこちら

03_views設定.png

1つだけ投稿した直後の記事一覧画面です。

03_記事一覧.png

全記事に対する制御

まず、2つの権限制御について説明します。

No 権限 テストユーザー
1 全ての記事の閲覧、編集ができる。 user01
2 全ての記事の閲覧ができる。 user02

権限と役割

ユーザーの役割を2つ追加します。

  • editor
  • viewer

editorが全ての記事の閲覧、編集ができる user01、
viewerが全ての記事の閲覧ができる user02 と付与するつもりで進めます。

02_役割.png

それぞれの有効にした権限は以下の通りです。

viewerで有効にした権限
Access administration menu
コンテンツの概要ページを確認
公開されたコンテンツを読む
管理ページとヘルプを利用
editorで有効にした権限
Access administration menu
テキストフォーマット Filtered HTML を使用
コンテンツの概要ページを確認
公開されたコンテンツを読む
管理ページとヘルプを利用
コンテンツアクセス制御を迂回する

※上記以外にnodeのコンテンツタイプ=記事の編集と削除の権限も有効にしています。

ユーザーの準備

user01とuser02を準備します。
user01には権限:editor
user02には権限:viewerを付与しました。

06_ユーザー一覧.png

Content Accessモジュールの設定

メニューから
サイト構築 > コンテンツタイプ > 記事 のページを表示します。
Content Accessモジュールが有効になっていると、Access controlのタブが表示されます。
Access controlタブのページを表示して、ユーザーの権限ごとに設定します。

設定の一例がこちら

05_アクセスコントロール.png

editorにはすべての記事(article)に対して閲覧、編集、削除出来るように、
一方でviewerには、閲覧権限のみできるように設定しました。
最後のSubmitボタンのクリックで設定完了です。

結果

ここまでの設定によりuser01とuser02で、
記事一覧の表示内容が変わっています。


user01(全ての記事の閲覧、編集ができる。 )

こちらは、編集権限があるので、記事の行に編集ボタンが表示されます。

07user01でみた記事一覧.png

記事詳細でも編集タブが表示されます。

08user01でみた記事.png


user02(全ての記事の閲覧ができる。 )

こちらは、閲覧権限しかないので、編集ボタンが表示されません。

09user02でみた記事一覧.png

記事詳細に編集タブは無しです。

10user02でみた記事.png

グループによる制御

ここからユーザーが所属するグループを追加して、
所属ごとの表示・編集制御を行います。

No 権限 テストユーザー
3 所属するグループの記事の閲覧・編集ができる。 user03
4 所属するグループの記事の閲覧ができる。 user04

準備

1.グループに所属するユーザー用に、別の権限・役割を当てておきます。

  • group member

15_グループ用役割追加.png

権限の内容は「editor」と同様に設定します。
※ コンテンツアクセス制御を迂回するはチェックを外してください。

  1. Content Accessモジュールの設定

Content Accessの設定で
「group member」にも「editor」と同じ権限を付与します。
(権限の制限はグループの設定で絞り込んでいきます)

グループの作成と設定(Organic groupsモジュールの設定)

ここからOrganic groupsモジュールを利用していきます。

まずコンテンツタイプ「グループ」を追加します。
(サイト構築 > コンテンツタイプ > コンテンツタイプの追加)

ポイントは、Organic groupsの設定を有効にすることです。
図の赤枠の箇所です。

14_グループ作成.png

これでノード(コンテンツタイプ=group)とOrganic groupsが紐づきました。

コンテンツタイプ=groupでグループ(Aグループ,Bグループ)を作成します。

17_グループ登録.png

グループとユーザー/グループと記事の紐付

環境設定 > Organic groups > OG field settings の画面を表示して、
ユーザー <-> グループ
記事 <-> グループ

この2つの関連性を登録します。

  1. Bundles = 記事、Fields = Groups audience で登録

  2. Bundles = ユーザー、Fields = Groups audience で登録

登録例↓
15_ユーザーとグループ.png

15_ユーザーとグループ紐付後.png

2つとも登録した結果↓

20_フィールド設定.png

カスタムフィールド追加

ユーザーのカスタムフィールドにグループを追加します。
(管理 > 環境設定 > ユーザー > アカウントの設定 > フィールドの管理)

16_ユーザーとグループ.png

ENTITY SELECTION は、先ほど追加したグループを選択します。
(編集の画面で表示されます)
この設定でユーザー登録・編集時にグループの紐付が出来るようになります。

ユーザー登録画面の一部
18_ユーザー登録にグループが追加された.png

記事も同様にカスタムフィールドを追加します。

この設定で記事登録時にグループが指定できるようになります。

Organic groupsでの権限設定

グループに所属するユーザーに対して、
通常の権限・役割とは別に権限を上書きで与えることができます。
この設定を行います。

環境設定 > Organic groups > OG roles overview の画面で、登録した「グループ」行の編集をクリック。

この画面で2つのグループ内権限を追加します。

  • editor member
  • viewer member

設定内容は、下記の画像を見てください。

34_グループ内権限.png

editor memberには、記事の閲覧、編集ができるように、
viewer memberには、記事の閲覧ができるように権限を付与します。
また、NON-MENBERにもコンテンツ内の表示権限は与えてあげてください。

これが完了したら、ユーザーにグループ内権限を付与します。

グループのコンテンツの編集画面にグループタブが登場しています。

21_グループの編集.png

ユーザーの画面で、権限が追加できます。

user03にはeditor memberを、user04にはviewer memberを付与します。

記事の投稿

テストデータとして、Aグループの記事とBグループ記事を投稿します。

22_投稿追加.png

記事一覧(Views)の追加設定

この項目で最後です。
今までの設定もほぼOKなのですが、
記事一覧でグループ設定のない記事がuser03とuser04に見えてしまいます。
そこで、記事一覧のViews設定を追加します。

AdvancedのCONTEXTUAL FILTERSで、
記事に追加したグループのカスタムフィールドを選択し、次の画面へ。
23_Views設定追加.png

記事のグループ値を元に絞り込みをします。

24_PHPコード.png

Provide default value でPHPコードを選択して、以下のコードを記入。

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にもチェックを付ける。

24_続き.png

この設定を保存すると・・・記事のグループに所属する人だけ、グループの絞り込み条件がつくので
自グループの記事だけ表示されるようになります。

結果

user01~user04まで

user01(全ての記事の閲覧、編集ができる。 )

30_user01.png

user02(全ての記事の閲覧ができる。 )

31_user02.png

user03(所属するグループの記事の閲覧・編集ができる。 )

32_user03.png

user04(所属するグループの記事の閲覧ができる。)

33_user04.png

長かったですね!
でも覚えれば全然時間はかからないと思います。(たぶん!)
もっと簡単な方法があったらた教えてください。
お疲れ様でした。