7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Identity Domainと認証連携したAPEXアプリケーションでIdentity Domainのグループとロールによって表示を制御してみる

7
Posted at

はじめに

Identity Domainと認証連携したAPEXアプリケーションで、ログインするIAMユーザーのグループとアプリケーション・ロールによって表示を制御することと試してみます。

前提

  • Autonomous AI Databaseに付属するAPEXを利用
  • IAMユーザは以下の通り
    • test_user1、test_admin1の2ユーザーを作成
    • どちらもグループAPEX_GROUPに所属
    • test_admin1はグループDomain_Administratorsに所属
    • test_admin1はアプリケーションロールService Administrator、test_user1はアプリケーションロールServiceViewerが付与されている(これらのロールについてはユーザーにOACの利用を許可するを参考にしてください)

1.ADBの作成とAPEXアプリケーションの作成

ADB-Sを作成し、APEXでアプリケーションを作成します。
ワークスペースを作成後、ワークスぺースにワークスペース管理者でログイン、
SQLワークショップのユーティリティ→サンプル・データセットでEMP/DEPTをインス
トール、そのあと続けてアプリケーションの作成でデモアプリケーションを作成しました。
image.png

2.APEXアプリケーションのIdentity Domainとの認証連携

こちらの資料の2.Identity Domains側での設定(APEXアプリケーションとの認証連携設定)4.APEX側での設定を行います。

IAMユーザの認証でアプリケーションにアクセスできるようになりました。

image.png

image.png

3.Identity Domainのグループ情報の取得

3と4も拡張編:グループによるアクセス制御とほぼ同じです。
アプリケーションの共有コンポーネントにある認証スキームから、2で作成した認証スキーム”IdentityDomain_Auth"を選択します。有効範囲groupsを追加し、追加ユーザー属性groupsを入力します。

image.png

ソースにPL/SQLコードを入力します。

image.png

入力したコードはこちらです。

procedure load_dynamic_groups as
  l_group_names apex_t_varchar2;
Begin
  -- 
  -- add all group name to l_group_names
  --
For I in 1..apex_json.get_count('groups') loop
   apex_string.push(
       p_table=> l_group_names,
      p_value => apex_json.get_varchar2(
                p_path=> 'groups[%d].name',
                p0       => i));
end loop;
--
-- save group name in session
--
apex_authorization.enable_dynamic_groups(
    p_group_names => l_group_names);
end;

ログイン・プロセスにコードに記述しているプロシージャload_dyanamic_groupsを設定します。

image.png

4.認可スキームの変更

アプリケーション定義の編集を選択し、上部のメニューからセキュリティを選択します。認可にあるロールまたはグループ・スキームのソースカスタム・コードを設定し、変更の適用をクリックします。

image.png

5.管理者を判定する認可スキームを作成

管理者だけ表示を変更したいと思います。
アプリケーションの共有コンポーネントから認可スキームを選択し、作成をクリックします。

image.png

最初からを選択し、APEXデモ管理者という名前で認可スキームを作成します。
スキーム・タイププールを戻すPL/SQLファンクションにして、グループがAPEX_GROUPかつServiceAdministratorのときだけTRUEとなるファンクションのコードを書きました。

image.png

入力したコードはこちらです。

declare
 cnt_1 NUMBER := 0;
 cnt_2 NUMBER := 0;
begin
 select count(*) into cnt_1 from apex_workspace_session_groups where apex_session_id=:app_session and group_name='APEX_GROUP';
 select count(*) into cnt_2 from apex_workspace_session_groups where apex_session_id=:app_session and group_name = 't6ykzgamihyonmu5j6sygyp3nryz7gba.ServiceAdministrator';
RETURN (cnt_1 > 0 AND cnt_2 > 0);
end;

6.アプリケーションの表示を編集

ナビゲーションメニューの”管理”を管理者だけに表示させます。
共有コンポーネントにあるナビゲーション・メニューから、リスト”ナビゲーション・メニュー”を選択します。
表示されているリスト・エントリから管理をクリックします。

image.png

上のメニューから認可を選択し、認可スキームに作成したAPEXデモ管理者を設定します。

image.png

7.動作確認

test_user1でアクセスし、ログインします。ナビゲーションメニューの管理は表示されません。

image.png

test_admin1でアクセスし、ログインすると、管理は表示されます。

image.png

8.ADBで情報を確認してみる

ユーザーのセッション情報は特別なAPEXビュー APEX_WORKSPACE_SESSION_GROUPSに保存されています。別途ADMINユーザーでADBにログインしてビューを確認してみました。
GROUP_NAMEに取得されたグループ情報が入っています。

SQL> select * from apex_workspace_session_groups;
 
WORKSPACE_ID WORKSPACE_NAME WORKSPACE_DISPLAY_NAME APEX_SESSION_ID USER_NAME                                    GROUP_NAME                                            
---------------- -------------- ---------------------- --------------- -------------------------------------------- ----------------------------------------------------- 
8122105399789462 APEXDEV        APEXDEV                104032176498654 test_admin1 (IdentityDomain_Auth)            APEX_GROUP                                            
8122105399789462 APEXDEV        APEXDEV                104032176498654 test_admin1 (IdentityDomain_Auth)            Domain_Administrators                                 
8122105399789462 APEXDEV        APEXDEV                104032176498654 test_admin1 (IdentityDomain_Auth)            t6ykzgamihyonmu5j6sygyp3nryz7gba.ServiceAdministrator 
8122105399789462 APEXDEV        APEXDEV                104939438030735 test_user1 (IdentityDomain_Auth)             APEX_GROUP                                            
8122105399789462 APEXDEV        APEXDEV                104939438030735 test_user1 (IdentityDomain_Auth)             t6ykzgamihyonmu5j6sygyp3nryz7gba.ServiceViewer        

おわりに

グループごとで表示を変えたいという要望はよくあると思います。APEXアプリケーションでは各コンポーネントでセキュリティの中に認可スキームが基本的に用意されていますので、制御することができると思います。

参考情報

7
2
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
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?