それでは、前回と同じく、モデルリソースとポートレットリソース別でサイトロール、組織ロールに付与する権限を考察しましょう。
サイトロール 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 |
---|---|---|
50910 | blog_site_role | 2 |
ID | リソース名 | scope | primKey | primKeyId | roleId | 操作 |
---|---|---|---|---|---|---|
5226 | com.liferay.blogs | 3 | 0 | 0 | 50910 | 2 |
5227 | com.liferay.blogs.model.BlogsEntry | 3 | 0 | 0 | 50910 | 1 |
5228 | com.liferay.blogs.model.BlogsEntry | 4 | 50893 | 50893 | 50910 | 32 |
ID | ロール | どんなリソース | どの操作 |
---|---|---|---|
5226 | blog_site_role | scope=3: サイトロールblog_site_roleを持つサイト中の全てcom.liferay.blogs | ADD_ENTRY |
5227 | blog_site_role | scope=3: サイトロールblog_site_roleを持つサイト中の全てcom.liferay.blogs.model.BlogsEntry | VIEW |
5228 | blog_site_role | scope=4: id=50893のcom.liferay.blogs.model.BlogsEntryインスタンス | UPDATE |
サイトロール x ポートレットリソース
以下の準備を行いましょう。
- blog_site_roleを開いて、権限定義に
- アプリケーション権限/ページに追加する権限を追加する
- デフォルトサイトのブログポートレットに
- ポートレット権限設定を開いてblog_site_roleに設定権限を追加する
それ後、ロールとResourcePermissionテーブルで確認しましょう。結果は以下の通りです(重複するデータについては除外します)。
ID | リソース名 | scope | primKey | primKeyId | roleId | 操作 |
---|---|---|---|---|---|---|
5232 | com_liferay_blogs_web_portlet_BlogsPortlet | 3 | 0 | 0 | 50910 | 2 |
5233 | com_liferay_blogs_web_portlet_BlogsPortlet | 4 | 38656_LAYOUT_com_liferay_blogs_web_portlet_BlogsPortlet | 0 | 50910 | 4 |
ID | ロール | どんなリソース | どの操作 |
---|---|---|---|
5232 | blog_site_role | scope=3: サイトロールblog_site_roleを持つサイト中の全てBlogsPortlet | ADD_ENTRY |
5228 | blog_site_role | scope=4: id=38656のレイアウト上のBlogsPortlet | UPDATE |
組織ロール
Liferayでは組織ロールの挙動はサイトロールとほぼ一致のため省略します。
まとめ
ここまで考察した結果をまとめましょう。scope=3のサイトロールと組織ロールの適用範囲はユーザが当該ロールを割り当てられているかとうかで決まります。
- 特定インスタンスを持っていないリソース
- サイトロールの権限の適用範囲は、ユーザが当該ロールを割り当てられているサイトのみです。そのため、リソースprimKeyは0になります。
- 組織ロールの権限の適用範囲は、ユーザが当該ロールを割り当てらている組織の組織サイトです。そのため、リソースprimKeyは0になります。
- リソースの特定インスタンス
- 権限の適用範囲はnameとprimKeyが特定できるリソースのみです。
リソース種類 | 特定インスタンス | リソース名 | scope | primKey | 適用範囲 |
---|---|---|---|---|---|
モデル | N | モデル名 | 1 | companyId | primKeyが表すLiferayインスタンス |
モデル | N | モデル名 | 3 | 0 | roleIdが表すロールを持ち場所(サイトまたは組織のサイト)中の全モデルインスタンス |
モデル | Y | モデル名 | 4 | リソースId | primKeyが表すモデルインスタンス |
ポートレット | N | ポートレットキー | 1 | companyId | primKeyが表すLiferayインスタンス |
ポートレット | N | ポートレットキー | 3 | 0 | roleIdが表すロールを持ち場所(サイトまたは組織のサイト)中の全primKeyが表すポートレット |
ポートレット | Y | ポートレットキー | 4 | layoutと ポートレットキー |
primKeyが表すポートレット |
その他
チームロール
Liferayでは、サイト内のチームが作成できます。チームに権限を与えることもできます。例として、デフォルトサイトにteam-1チームを作成した後に、前回作成したpermission-blogの権限設定を開いて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 | チーム名 |
---|---|
50924 | team-1 |
roleId | ロール名 | ロールtype |
---|---|---|
50925 | 50924 | 4 |
ID | リソース名 | scope | primKey | primKeyId | roleId | 操作 |
---|---|---|---|---|---|---|
5239 | com.liferay.blogs.model.BlogsEntry | 4 | 50893 | 50893 | 50925 | 32 |
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=2とprimKeyはLiferay DXPサイトとユーザー非公開サイトのgroupIdの権限レコードが作成されました。
ID | リソース名 | scope | primKey | primKeyId | roleId | 操作 |
---|---|---|---|---|---|---|
5324 | com_liferay_blogs_web_portlet_BlogsPortlet | 2 | 20126 | 20126 | 50867 | 8 |
5325 | com_liferay_blogs_web_portlet_BlogsPortlet | 2 | 20132 | 20132 | 50867 | 8 |
scope | 適用範囲 |
---|---|
2 | primKeyが表すサイト内のリソース、1個レコードの適用サイト数は1 |
3 | roleIdが表すサイトロールを持つサイト内のリソース 、1個レコードは複数サイト適用可能 |
次回はここまて考察した内容をLiferayカスタマイズでの運用を考察したい思います。
No comments:
New comments are not allowed.