LoginSignup
10
11

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-02-05

概要

バージョン

本記事は、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

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

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11