SAPにおける権限チェック命令―。AUTHORITY-CHECKをABAP初心者向けにわかりやすく3分で解説します。
SAPのアドオンプログラムにてユーザ権限のチェックを行う場合にはAUTHORITY-CHECK命令についての理解が必要不可欠です。
このページでは、SAPにおける権限の仕組みを復習しつつAUTHORITY-CHECK命令の基本・構文ルールを図解付きで解説します。
SAPエンジニア/ABAPerを目指す方であれば知らないと恥ずかしいSAPの基本知識の1つです。是非最後までご覧ください。
SAP権限の仕組み
AUTHORITY-CHECK命令を理解するためにはSAPの権限制御の仕組みを理解する必要があります。はじめにSAPにおける権限オブジェクト/権限項目/権限値についておさらいしておきます。
権限オブジェクト/権限項目/権限値
権限オブジェクトとはSAPにおける権限制御の最小単位で、簡単に言えば「処理の単位」です。
例えば「S_USER_GRP」の権限オブジェクトがあれば、ユーザマスタに関する権限が与えられていると考えられます。
さらに、その権限オブジェクトに対して権限項目/権限値という細かな設定を行います。
権限項目は、具体的に「どのような処理を行うことができるのか?」を表す単位です。例えば、変更権限や照会権限を制御する「ACTVT」などが代表例です。
そこに、権限値として「02⇒変更」や「03⇒照会」などの値を設定します。
権限オブジェクト/権限項目/権限値のイメージは以下の通りです。
上記で「特別目的元帳に対する変更と照会権限が与えられる」イメージが持てればOK。
ユーザマスタや単体ロール/集合ロールと合わせてSAPでは権限制御を行います。詳しく学習しておきたい!という方は合わせて以下の記事もご覧ください。
AUTHORITY-CHECK命令
AUTHORITY-CHECK命令は、ユーザの権限をチェックする命令。
具体的にはユーザに付与されている権限オブジェクト/権限項目/権限値の値が指定のものと合致するか?を判断する命令です。
構文ルール:AUTHORITY-CHECK命令
AUTHORITY-CHECK OBJECT (権限オブジェクト) ID (権限項目) FIELD = (権限値).
OBJECTオプションの後にチェックする権限オブジェクトを。IDオプションの後に権限項目を。FIELDオプションの後に権限値をセットします。
IDの後ろには権限項目を1つ以上(最大10個まで)指定する必要があり、指定しない場合は構文エラーが発生します。
以下のサンプルコードでは、対象のユーザに「会社コード1000」の会計伝票に対する「照会権限」が付与されているかどうか?をチェックするサンプルコードです。
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' " 「F_BKPF_BUK」→会計伝票 ID 'ACTVT' FIELD '03' " 操作「03」→照会 ID 'BUKRS' FIELD '1000'. " 対象会社コード「1000」
最大10個までチェックすることが可能なのですが、10個もチェックするのは保守性の観点から避けたほうが良いでしょう。
"FOR USER" オプション
AUTHORITY-CHECK命令で権限をチェックする対象ユーザは当該処理(プログラム)を実行するユーザですが、稀に自分以外のユーザの権限をチェックしたい場合があります。
その際に利用できるのが "FOR USER" オプションです。
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' " 「F_BKPF_BUK」→会計伝票 FOR USER 'TESTUSER' " 「TESTUSER」の権限チェック ID 'ACTVT' FIELD '03' " 操作「03」→照会 ID 'BUKRS' FIELD '1000'. " 対象会社コード「1000」
"FOR USER" オプションは実行ユーザ以外の権限チェックを行います。ただし、利用頻度はあまり高くはないので知識として押さえておければOKです。
リターンコード:SY-SUBRC
権限チェックの結果は、システム項目「SY-SUBRC」に格納されます。
AUTHORITY-CHECKについては、SY-SUBRCにどの値が入ってくるか?を詳しく知っているとデバッグで役立ちますので、少しだけ深く説明します。
リターンコード:0
「0」は権限チェックに成功したことを示します。逆に言うと「0」以外の場合は権限チェックが失敗しているので、以下のようにIF文 / MESSAGE命令と合わせて処理を記述するパターンが王道です。
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' " 「F_BKPF_BUK」→会計伝票 ID 'ACTVT' FIELD '03' " 操作「03」→照会 ID 'BUKRS' FIELD '1000'. " 対象会社コード「1000」 IF SY-SUBRC <> 0. MESSAGE '権限がありません'TYPE E. ENDIF.
リターンコード:4
「4」は権限チェックの失敗を表します。さらに細かく説明すると、権限項目の値が異なっているという場合にリターンコードが「4」となります。
FIELDに"01"(登録)を指定した場合、当該ユーザには"03"(照会)しかついていない場合がこれに該当します。
権限オブジェクトと権限項目は合致するが権限値だけが異なっているよ!という場合がリターンコード「4」となります。
リターンコード:12
これもリターンコード「4」と同様、権限チェックに失敗した場合にセットされます。
リターンコード「4」の場合と異なるのはそもそも権限項目がない場合に「12」となります。
リターンコード「4」の場合は、権限値が異なる場合。リターンコード「12」の場合は権限項目が存在しない場合です。
SAP / ABAPを1から学習したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!