PR

【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から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPBASISSAP
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました