Quantcast
Channel: aegif Labo Blog
Viewing all articles
Browse latest Browse all 244

ResourcePermissionの考察 (2)

$
0
0
前回、Liferayが一般ロールに与える権限を考察しました。今回は、サイトロール、組織ロールなどグループロールに対する権限の考察から始めようと思います。Liferay権限システムでは、サイトロールと組織ロールに付与される一般権限の適用範囲はグループテンプレートと認識し、ResourcePermissionテーブルではscope=3になります

それでは、前回と同じく、モデルリソースとポートレットリソース別でサイトロール、組織ロールに付与する権限を考察しましょう。

サイトロール x モデルリソース

以下の準備を行いましょう。設定方法は前回同様です。

  • blog_site_roleサイトロールを作成する
  • blog_site_roleを開き
    • ブログ/エントリー追加する権限を追加する
    • ブログのエントリ/表示権限を追加する
  • 前回、デフォルトサイトに作成したブログエンティティpermission-blogの権限定義において
    • blog_site_role更新権限を追加する
では、Role_ResourcePermissionテーブルを確認しましょう。

select roleId, name, type_ from Role_ where name = "blog_site_role";
select resourcePermissionId, name, scope, primKey, primKeyId, roleId, actionIds
from ResourcePermission where roleId = 50910;
結果は以下の通りです。

roleIdロール名ロールtype
50910blog_site_role2
IDリソース名scopeprimKeyprimKeyIdroleId操作
5226com.liferay.blogs300509102
5227com.liferay.blogs.model.BlogsEntry300509101
5228com.liferay.blogs.model.BlogsEntry450893508935091032
その結果が表す意味を考察しましょう。

IDロールどんなリソースどの操作
5226blog_site_rolescope=3: サイトロールblog_site_roleを持つサイト中の全てcom.liferay.blogsADD_ENTRY
5227blog_site_rolescope=3: サイトロールblog_site_roleを持つサイト中の全てcom.liferay.blogs.model.BlogsEntryVIEW
5228blog_site_rolescope=4: id=50893com.liferay.blogs.model.BlogsEntryインスタンスUPDATE
※ ユーザは複数サイト中同じサイトロールに割り当てられることができるため、ユーザがサイトロールを持つサイト中のみに、そのサイトロールに与えるscope=3の権限を持ちます。

サイトロール x ポートレットリソース

以下の準備を行いましょう。
  • blog_site_roleを開いて、権限定義に
    • アプリケーション権限/ページに追加する権限を追加する
  • デフォルトサイトのブログポートレットに
    • ポートレット権限設定を開いてblog_site_role設定権限を追加する
それ後、ロールとResourcePermissionテーブルで確認しましょう。結果は以下の通りです(重複するデータについては除外します)。


IDリソース名scopeprimKeyprimKeyIdroleId操作
5232com_liferay_blogs_web_portlet_BlogsPortlet300509102
5233com_liferay_blogs_web_portlet_BlogsPortlet438656_LAYOUT_com_liferay_blogs_web_portlet_BlogsPortlet0509104
結果を考察しましょう。

IDロールどんなリソースどの操作
5232blog_site_rolescope=3: サイトロールblog_site_roleを持つサイト中の全てBlogsPortletADD_ENTRY
5228blog_site_rolescope=4: id=38656のレイアウト上のBlogsPortletUPDATE

組織ロール

Liferayでは組織ロールの挙動はサイトロールとほぼ一致のため省略します。

まとめ

ここまで考察した結果をまとめましょう。scope=3のサイトロールと組織ロールの適用範囲はユーザが当該ロールを割り当てられているかとうかで決まります。

  • 特定インスタンスを持っていないリソース
    • サイトロールの権限の適用範囲は、ユーザが当該ロールを割り当てられているサイトのみです。そのため、リソースprimKeyは0になります。
    • 組織ロールの権限の適用範囲は、ユーザが当該ロールを割り当てらている組織の組織サイトです。そのため、リソースprimKeyは0になります。
  • リソースの特定インスタンス
    • 権限の適用範囲はnameprimKeyが特定できるリソースのみです。

リソース種類特定インスタンスリソース名scopeprimKey適用範囲
モデルNモデル名1companyIdprimKeyが表すLiferayインスタンス
モデルNモデル名30roleIdが表すロールを持ち場所(サイトまたは組織のサイト)中の全モデルインスタンス
モデルYモデル名4リソースIdprimKeyが表すモデルインスタンス
ポートレットNポートレットキー1companyIdprimKeyが表すLiferayインスタンス
ポートレットNポートレットキー30roleIdが表すロールを持ち場所(サイトまたは組織のサイト)中の全primKeyが表すポートレット
ポートレットYポートレットキー4layout
ポートレットキー
primKeyが表すポートレット

その他

チームロール
Liferayでは、サイト内のチームが作成できます。チームに権限を与えることもできます。例として、デフォルトサイトにteam-1チームを作成した後に、前回作成したpermission-blogの権限設定を開いてteam-1ロールを確認できます。

では、team-1ロールに更新する権限を追加し、データベースを確認しましょう。

select teamId, name from Team where name = "team-1";
select roleId, name, type_ from Role_ where name = "50924";
select resourcePermissionId, name, scope, primKey, primKeyId, roleId, actionIds
from ResourcePermission where roleId = 50925;
結果は以下の通りです。

teamIdチーム名
50924team-1
roleIdロール名ロールtype
50925509244
IDリソース名scopeprimKeyprimKeyIdroleId操作
5239com.liferay.blogs.model.BlogsEntry450893508935092532
チームを作成後、Liferayは自動的にclassPk=teamIdclassName=チームのロールを作成します。そのロールに与える権限はチームの所属サイト上のブログインスタンスとブログポートレットインスタンスだけのため、チームロールの権限レコードはscope=4になります。
scope=2
Liferay公式ブログ記事の説明の通り、scope=2(グループ範囲)のResourcePermissionレコードが存在します。ただし、今まで検証した権限のscopeはいずれでも2になりません。では、scope=2の権限は一体何でしょうか?

答えは、指定されたグループ(=サイト)内のリソースのみに有効する権限です。以下の手順で検証しましょう。

  • 一般ロールblog_roleを開き
    • 権限の定義ブログ/権限設定を追加する
    • 追加の際、権限設定項目の右の変更ボタンを押し、Liferay DXP(デフォルトサイト)とユーザー非公開サイトを選択する
その後、データベースをチェックしましょう。

select resourcePermissionId, name, scope, primKey, primKeyId, roleId, actionIds
from ResourcePermission where roleId = 50867 and scope = 2;
結果はご覧の通り、scope=2primKeyLiferay DXPサイトとユーザー非公開サイトgroupIdの権限レコードが作成されました。

IDリソース名scopeprimKeyprimKeyIdroleId操作
5324com_liferay_blogs_web_portlet_BlogsPortlet22012620126508678
5325com_liferay_blogs_web_portlet_BlogsPortlet22013220132508678
では、scope=2の権限とscope=3のサイトロールの権限の違いを考察しましょう。

scope適用範囲
2primKeyが表すサイト内のリソース、1個レコードの適用サイト数は1
3roleIdが表すサイトロールを持つサイト内のリソース 、1個レコードは複数サイト適用可能

次回はここまて考察した内容をLiferayカスタマイズでの運用を考察したい思います。

Viewing all articles
Browse latest Browse all 244

Trending Articles