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の属性を展開すると以下の通り。
どちらの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アプリケーションで、テスト対象ロールをユーザーに直接付与。
この状態でService StudioでEntityのデータを覗いてみましょう。
(Aggregateを使ってRole Entityをジョインしてあります)
まずは、User_Role Entity。
共に、想定通りにRoleがテストユーザーに紐付いています。
RoleのGrant Actionでロール付与
テストユーザー (RoleTestUser2) のUserId=396
ロール=TestRole2
を用意。
Grant Actionで付与したロールがEntityに登録されるかどうかを確認する。
テストユーザーでログインし、以下のActionを実行。これでログインユーザーにTestRole2を付与している。
共に、想定通りにRoleがテストユーザーに紐付いています。
公式ドキュメントのUser_Roleの説明で「このエンティティには、Usersアプリケーションを使用して特定のユーザーに直接追加されたロールのみが保存されます。」とあるために念のために確認してみましたが、UsersアプリケーションでなくGrant Actionを使ってもUser_Roleに記録されるようです。
Usersアプリケーションでグループを経由してロール付与 (2パターン)
ロール付与済みグループにユーザー追加
テストユーザー (RoleTestUser3) のUserId=397
ロール=TestRole3
先にTestGroup1にTestRole3を付与しておく。
User_Roleは、グループを経由して割り付けられたロールのレコードを持たない。
ユーザー追加済みグループにロール付与
テストユーザー (RoleTestUser4) のUserId=398
ロール=TestRole4