【ABAP】AUTHORITY-CHECK命令→SAPの権限チェックを3分で

ABAP

SAPにおける権限チェック命令―。AUTHORITY-CHECKをABAP初心者向けにわかりやすく3分で解説します。

SAPのアドオンプログラムにてユーザ権限のチェックを行う場合にはAUTHORITY-CHECK命令についての理解が必要不可欠です。

このページでは、SAPにおける権限の仕組みを復習しつつAUTHORITY-CHECK命令の基本・構文ルールを図解付きで解説します。

このページで学べる内容
  • SAPの権限の仕組み・概要
  • AUTHORITY-CHECK命令の基本
  • AUTHORITY-CHECK命令の構文ルール/注意点

SAPエンジニア/ABAPerを目指す方であれば知らないと恥ずかしいSAPの基本知識の1つです。是非最後までご覧ください。

スポンサーリンク

SAP権限の仕組み

AUTHORITY-CHECK命令を理解するためにはSAPの権限制御の仕組みを理解する必要があります。はじめにSAPにおける権限オブジェクト/権限項目/権限値についておさらいしておきます。

SAPにおける権限の3大要素
  • 権限オブジェクト
  • 権限項目
  • 権限値

権限オブジェクト/権限項目/権限値

権限オブジェクトとはSAPにおける権限制御の最小単位で、簡単に言えば「処理の単位」です。

権限オブジェクトの例
  • S_GUI
    →GUI アクティビティの権限
  • S_DATASET
    →ファイルアクセス権限
  • S_USER_GRP
    →ユーザマスタ管理:ユーザグループ
  • G_GLTP
    →特別目的元帳

例えば「S_USER_GRP」の権限オブジェクトがあれば、ユーザマスタに関する権限が与えられていると考えられます。

さらに、その権限オブジェクトに対して権限項目/権限値という細かな設定を行います。

権限項目は、具体的に「どのような処理を行うことができるのか?」を表す単位です。例えば、変更権限や照会権限を制御する「ACTVT」などが代表例です。

そこに、権限値として「02⇒変更」や「03⇒照会」などの値を設定します。

権限オブジェクト/権限項目/権限値のイメージは以下の通りです。

見出し

権限オブジェクト ⇒ 「G_GLTP」特別目的元帳データベース

権限項目     ⇒ 「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」に格納されます。

システム項目

システム項目とはSAP側で値が自動的に付与される項目(変数)のこと。ABAPのプログラム実行時にはこのシステム項目の値を条件として利用したりすることができます。

システム項目の1つ。SY-SUBRCの「RC」は”Return Code”の略。その名の通り、処理の結果がその変数に値として入っています。

システム項目について合わせて確認しておきたい!という方は以下の記事をご覧ください。

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」の場合は権限項目が存在しない場合です。

AUTHORITY-CHECK命令のまとめ
  • AUTHORITY-CHECK命令は「ユーザに付与されている権限オブジェクト/権限項目/権限値の値が指定のものと合致するか?」を判断する命令
  • サンプルコードは以下の通り。
AUTHORITY-CHECK OBJECT 'F_T011'
  ID 'ACTVT' FIELD '01'
  ID 'VERSN' FIELD '1000' .

IF SY-SUBRC <> 0.
  MESSAGE '権限がありません'TYPE E.
ENDIF.

このサンプルコードでは、財務諸表バージョン1000に対して、登録権限を持っているかどうか?というチェックをしています。

権限オブジェクト ”F_T011” は財務諸表バージョンに関わるオブジェクト。

その下にぶら下がる権限項目 ”ACTVT” は登録・変更・参照などを制御、 "VERSN" はどの財務諸表バージョンを対象とするか?というものです。

SAP / ABAPを1から学習したい方は

SAP / ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。

タイトルとURLをコピーしました