Liferayで特定の条件に合致するユーザを動的にロールアサインする - Liferayで特定の条件に合致するユーザを動的にロールアサインする - aegif Labo Blog Liferay
null Liferayで特定の条件に合致するユーザを動的にロールアサインする
こんにちは。おおたにです。
今回はセグメント機能を利用して、動的にユーザをロールにアサインする方法を紹介します。
具体的には、特定の条件を指定したユーザセグメントを作成し、そのユーザセグメントをロールに割り当てることで、条件に合致したユーザがロールにアサインされるという形になります。例えば、これまでユーザ情報をLiferayに連携する時に所定のルールに則ってユーザをロールにアサインしていたものが、セグメントでの条件設定+セグメントを通じたユーザの動的ロールアサインで実現できるかもしれません。
では、その詳しい方法を見ていきましょう。なお、本機能はLiferay DXP 7.2 SP2もしくはSP3以降でのみ利用できる点にはご注意ください。また、セグメントの説明は記事「Liferayのセグメント機能を使ってWebページをパーソナライズしてみよう」をご参照ください。
前提条件
セグメントをロールに割り当てるためには事前の設定が必要です。まず、以下の2設定を行います。
- 画面右上のアプリケーションメニュー > コントロールパネル > システム設定 > コンテンツとデータ > セグメント > セグメントのサービス > セグメントによるロールの割り当てを有効にする をON
- 画面右上のアプリケーションメニュー > コントロールパネル > インスタンス設定 > コンテンツとデータ > セグメント > セグメントのサービス > セグメントによるロールの割り当てを有効にする をON
セグメントを標準ロールにアサインする
続いて、セグメントを作成して標準ロールにアサインしてみましょう。なお、いくつか制約事項があります。
- グローバルサイトで定義されたセグメントのみ標準ロールにアサインできる
- Administratorロールにはアサインできない(Liferay 2023.Q4.0で確認。UI上はアサインできるけど動作しない模様。Site Administrator/Site Ownerにアサインできないのと同じ制約だと思われる)
ここでは、ユーザのプロパティ「役職」が「部長」のユーザをPower Userロールにアサインしてみたいと思います。
1. 画面右上のアプリケーションメニュー > コントロールパネル > ロール に移動する
2. Power Userをクリックし、担当者 > セグメント に移動する
3. 追加アイコンをクリックするとグローバルサイトで定義されたセグメント一覧が表示される。未定義の場合は何も表示されないので右上の「新しいセグメント」アイコンをクリックする
4. タイトルを入力し、右ペインから ユーザー>役職 を左の条件欄にドラッグ&ドロップし、「等しい」「部長」と設定して保存をクリックする
5. セグメントを定義できたら、そのセグメントを選択して「追加」をクリックする
6. Power Userの担当者に作成したセグメントが追加されたことを確認する
これでセグメントの定義とAdministratorロールへのアサインができました。続いて、動作確認してみましょう。
7. テスト用のユーザを2つ作成し、片方の役職を「部長」とし、もう片方を「部長」以外にする。
8. テスト用のページに適当なウィジェットを配置し、権限設定でPower User以上にしか見えないようにする(GuestロールにView権限が付いている場合は削除する)
9. 役職「部長」のテストユーザでログインし、上記ウィジェットが見えることを確認する
10. もう一方のテストユーザでログインし、上記ウィジェットが見えないことを確認する
無事セグメントの標準ロールアサインを動作確認できたかと思います。
セグメントにサイトロールをアサインする
次に、セグメントにサイトロールをアサインしてみましょう。こちらもいくつか制約事項があります。
- 当該サイトで定義されたセグメントのみサイトロールをアサインできる
- Site Owner/Site Administratorはアサインできない
ここでは、ユーザのプロパティ「役職」が「部長」のユーザをSite Memberロールにアサインしてみたいと思います。
1. テスト用のサイトに移動し、画面左のプロダクトメニュー > メンバー > セグメント に移動する
2. 追加ボタンをクリックする
3. タイトルを入力し、右ペインから ユーザー>役職 を左の条件欄にドラッグ&ドロップし、「等しい」「部長」と設定して保存をクリックする(先ほどと同じ条件)
4. セグメントを定義できたら、そのセグメントのアクションメニュー > サイトロールの割当て をクリックする。なお、グローバルサイトのセグメントのアクションメニューにはサイトロール割り当てアクションは表示されない
5. Site Memberロールを選択して追加をクリックする。Site Administrator/Site Ownerはアサインできないようになっている
これでセグメントへのサイトロールアサインは完了です。では動作確認してみましょう。先ほどと同様の条件なので、テストユーザは使い回すことにします。
6. 当該サイトのサイトメンバーにテスト用ユーザが含まれていないことを確認する(含まれている場合は削除する)
7. テスト用のページに配置したウィジェットの権限設定で、Site MemberにView権限を付ける(Power UserやGuestロールにView権限が付いている場合は削除する)
8. 役職「部長」のテストユーザでログインし、上記ウィジェットが見えることを確認する
9. もう一方のテストユーザでログインし、上記ウィジェットが見えないことを確認する
これでセグメントのサイトロールアサインを動作確認できました。
今回の紹介は以上になります。使い方によってはとても便利な機能だと思いますので、是非利用してみてください。