同じトランザクションを使う担当者でも、会社コードや部門によって「照会できるデータ」「変更できるデータ」が異なることがあります。アドオンで行う権限チェックは、起動権限だけでなく、実際に扱うデータと操作に合わせて設計します。本記事では汎用モジュールAUTHORITY_CHECKを題材に、ABAPの標準命令AUTHORITY-CHECKとの関係と実装時の注意点を整理します。
トランザクションの起動権限だけでは足りない
S_TCODEはトランザクションを起動できるかを確認するための権限オブジェクトです。一方、同じレポート内で「会社コードAだけ表示」「会社コードBの更新は不可」といった制限には、業務に応じた権限オブジェクトの項目値を確認する必要があります。データベースを直接読み取るアドオンでは、検索結果に標準画面と同じ権限制御が自動で付くと考えないでください。
まずはAUTHORITY-CHECK命令を理解する
実行中のユーザーに対する通常の権限確認は、ABAP命令のAUTHORITY-CHECK OBJECTで表せます。次は概念を示す例です。実際には対象業務で定義された権限オブジェクトと、その全フィールドを確認して置き換えます。
AUTHORITY-CHECK OBJECT 'Z_DEPT_AUTH'
ID 'ACTVT' FIELD '03'
ID 'Z_DEPT' FIELD lv_department.
IF sy-subrc <> 0.
" この部門のデータは表示しない/処理を中止する
ENDIF.
ACTVTの03は一般的な照会、02は変更です。判定が成功したときだけsy-subrc = 0になります。オブジェクト名と項目名は説明用の例であり、そのまま実システムに貼り付けても動作しません。
汎用モジュールAUTHORITY_CHECKを使う場面
AUTHORITY_CHECKは権限オブジェクトとチェックする項目・値を渡して判定する汎用モジュールです。実行ユーザー以外の権限を管理・診断目的で調べる設計などで検討されます。ただし、通常のアドオン業務処理でログオン中ユーザーを確認するなら、まずAUTHORITY-CHECK命令を使う構成が分かりやすいです。異なるユーザーを指定できることを、実際の処理利用者の権限を飛ばす手段にしてはいけません。
汎用モジュールを使う場合は、対象システムのSE37でインターフェース、戻り値・例外、利用可能なリリースを確認してください。特に命令のsy-subrcと汎用モジュール呼出し後のsy-subrcを同じ意味として扱わず、実際の例外定義に沿って判定します。
一覧レポートでの実装とテスト
- 表示・登録・変更など、操作ごとに必要な活動区分と組織項目を決める。
- 選択条件だけで判定せず、取得・更新するデータの組織値に対して権限を確認する。権限のない行は出力やダウンロードからも除く。
- 権限オブジェクトの全項目、空値、複数会社コード、権限のないユーザーをテストする。
- 不足時は
SU53や権限トレースを使い、チェックしたオブジェクト・項目値とロール設定を照合する。
「検索画面では制限したが、別経路の明細表示や一括更新で参照できる」という抜け道を防ぐことが重要です。権限設計とテスト全体の進め方は、関連記事で確認できます。
参考・関連記事
- SAPの権限テストの進め方:SU53と許可・拒否のテスト
- ロールを一括割当する方法:権限付与の運用
- SUIMで割当と変更履歴を確認する方法:ユーザーとロールの調査
- 汎用モジュール一覧:関連する開発記事を探す