GeneXus Access Manager(GAM) #2 ユーザアプリ認証設定(Web)にて、Webアプリに対するGAMの認証適用方法を確認しました。今回はAuthorizationの基本を確認します。
GAMのAuthorizationの概要
ざっくり理解では
- 実行時に自動的にチェックされるアクセス許可
- プログラムでチェックされるアクセス許可
の2種類があるとのこと。
いずれもGAMのPermissionをUserに直接付与、またはRollに関連付けしてそのRollをユーザに付与することで、オブジェクト起動時、またはプログラムの中で明示的に必要なPermissionを持ったユーザかをチェッするという趣旨です。
実行時の自動チェック
Webパネル等のIntegrated SecurityプロパティをAuthorizationに変更するとPermission Prefixという関連プロパティが設定できるようになります。デフォルトではそのオブジェクト名が設定されます。例えばWpAuth00というWebパネルで設定すると以下のようになり
この状態でこのオブジェクトをビルドして、GAMBackendアプリで確認すると、「wpauth00_Execute」というPermissionが作られます。User直なり、User-Rollなりにこのwpauth00_Executeが「付与されていない」状態で、このWebパネルを起動しようとすると、「実行時の自動チェック」が動作してUnauthorized画面に遷移します。
当然この調子で全ての画面にAuthorized設定をしていくと1 画面:1 Permission ができてしまい煩雑ですので、以下のようにしてみました。
- WpAuth00でPermission Prefixに「WpAuth0X」を設定
- WpAuth10でPermission Prefixに「WpAuth1X」を設定
この状態でビルドすると以下の2つのPermissionが生成されます。
そして、WpAuth00に加え、WpAuth01、WpAuth02のPermission Prefixに「WpAuth0X」を設定、WpAuth10に加え、WpAuth11,WpAuth12のPermission Prefixに「WpAuth1X」を設定。
これで文字通り0X系の画面はWpAuth0Xが付与されたユーザ、1X系の画面はWpAuth1Xが付与されたユーザにより起動できることを確認しました。
Permissionの親子関係等、追加で確認必要ですが複数のPermissionをRollで束ねれば一通りの権限制御はできそうな感触です。
プログラムでのチェック
GAMRepositoryオブジェクトのCheckPermissionメソッドで、プログラム中でユーザが権限を持っているかのチェックが可能です。
Event 'Save'
If GAMRepository.CheckPermission(!"Save")
Msg(!"Saved!")
Else
Msg(!"You don't have enough permission to save!")
EndIf
Endevent
のようにイベントの中でチェックしたり、Startイベントの中でそもそものボタンの表示・非表示の制御等にも使えますね。
2021年07月28日 初版