1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[OutSystems]User_RoleとUser_Effective_Role

Posted at

OutSystemsのロールには、LifeTimeで管理するITユーザーのロールと、Usersアプリケーションで管理するエンドユーザーのロールがあります。
今回の話題は、エンドユーザーのロールについて。

「あるユーザーがあるロールを保持しているかどうか」は、Roleの下にある「Check<Role名>Role」Actionを使うのですが、(System)のEntityを使って判定することもできます。Entityを使うと、そのユーザーが保有するロールの一覧が取得できるのがいい点です。
このEntityには、User_RoleとUser_Effective_Roleがあります。それぞれの使い方を違いを確認していこうと思います。

確認環境

Personal Environment(Version 11.13.0 (Build 31107))
Service Studio (Version 11.12.5)

公式ドキュメント

ユーザーロールの、「OutSystemsメタモデルのユーザーロール」に記述があります。

User_Roleエンティティは、ユーザーとロールの関連付けが保存されるメタモデルテーブルです。このエンティティには、Usersアプリケーションを使用して特定のユーザーに直接追加されたロールのみが保存されます。

User_Effective_Roleエンティティは、ユーザー固有のロールが保存されるメタモデルビューです。このエンティティには、ユーザーに直接割り当てられたロールと、ユーザーが属しているグループに割り当てられたロールが含まれます。

Entityの定義

(System)モジュールの下にあるEntityの属性を展開すると以下の通り。
image.png

どちらのEntityもUser_IdとRole_Idの組み合わせ。
User_Effective_RoleにEntity Action (Createなど) がないのはビューだからですね。

EntityのDescription

User_RoleのDescription

Roles for each end user.
(エンドユーザーに対するRole)

User_Effective_RoleのDescription

Read-only view containing user specific roles (either direct or via user groups).
ユーザーのRole(直接付与したものとグループ経由したもの)の読み取り専用のビュー

動作確認

上記のことから、User_Roleはユーザーに直接付与したロール、User_Effective_Roleはユーザーに直接付与したロールとグループを経由して付与したロールを持っているように見えます。

そこで、テストユーザーに色々な方法でロールを付与して確認してみます。

結果まとめ

先に確認結果をまとめておきます。
確認してみたところ、曖昧だったところが明らかになっただけで、ドキュメント通りですね。

User_Roleは、ユーザーに直接付与したロールのみが登録される。UserIdで検索すると、そのユーザーに直接付与したロールの一覧が得られる。
直接付与とは、Usersアプリケーションによる付与とGrant Actionによる付与を双方を含む。

User_Effective_Roleはユーザに直接付与したロールに加えて、ユーザーが所属しているグループに付与されたロールも検索できる。

上記条件で使いたい方を選び、Role Entityとジョインさせて検索すると良さそうですね。

Usersアプリケーションで直接ロール付与

UserId=395のユーザーRoleTestUser1を新たに作成してテスト。
付与するロールはTestRole1という名前で用意しておきます。

以下の様にUsersアプリケーションで、テスト対象ロールをユーザーに直接付与。
image.png

この状態でService StudioでEntityのデータを覗いてみましょう。
(Aggregateを使ってRole Entityをジョインしてあります)
まずは、User_Role Entity。
image.png

次はUser_Effective_Role Entity。
image.png

共に、想定通りにRoleがテストユーザーに紐付いています。

RoleのGrant Actionでロール付与

テストユーザー (RoleTestUser2) のUserId=396
ロール=TestRole2
を用意。

Grant Actionで付与したロールがEntityに登録されるかどうかを確認する。
テストユーザーでログインし、以下のActionを実行。これでログインユーザーにTestRole2を付与している。
image.png

User_Role
image.png

User_Effective_Role
image.png

共に、想定通りにRoleがテストユーザーに紐付いています。
公式ドキュメントのUser_Roleの説明で「このエンティティには、Usersアプリケーションを使用して特定のユーザーに直接追加されたロールのみが保存されます。」とあるために念のために確認してみましたが、UsersアプリケーションでなくGrant Actionを使ってもUser_Roleに記録されるようです。

Usersアプリケーションでグループを経由してロール付与 (2パターン)

ロール付与済みグループにユーザー追加

テストユーザー (RoleTestUser3) のUserId=397
ロール=TestRole3

先にTestGroup1にTestRole3を付与しておく。
image.png

次にTestGroup1をテストユーザーに割り当てる。
image.png

User_Roleは、グループを経由して割り付けられたロールのレコードを持たない。
image.png

User_Effective_Role
image.png

ユーザー追加済みグループにロール付与

テストユーザー (RoleTestUser4) のUserId=398
ロール=TestRole4

次に順番を逆にして、グループ(TestGroup2)にテストユーザーを割り当てておき、
image.png

後からグループにロールを付与する場合。
image.png

User_Roleにレコードが追加されないのは同じ。
image.png

User_Effective_Role
image.png

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?