権限チェックの実装

このトピックでは、NetWeaver ABAPの権限チェックの実装を取り上げて説明します。

 

権限のチェックは、プログラムレベルのチェックとシステムレベルのチェックと2種類があります。

プログラムレベルのチェック

プログラムレベルでのチェックは、プログラムでAUTHORITY-CHECKを明示的に組み込む必要があります。 AUTHORITY-CHECK によって、ユーザに指定されたプロファイルが検索され、AUTHORITY-CHECKに指定された権限オブジェクトの権限をユーザが持っているかどうかが確認されます。検索された権限のいずれかが必要な値に一致する場合は、チェックは成功です。

システムレベルのチェック

システムレベルのチェックは、個別にプログラミングする必要がなく、システムより自動的に実施される権限チェックです。トランザクションやレポートプログラムが起動する際に、ユーザが該当機能を実行できる権限をもっているかどうかをシステムよりチェックされます。

トランザクション起動時

トランザクションが起動する際に、システムから以下のチェックは順に実施されます。

  1. トランザクションコードは有効か
    テーブルTSTCチェック
  2. トランザクションがシステム管理者によってロックされているか
    テーブルTSTCチェック
  3. S_TCODE権限チェック 
    ユーザが実行できるトランザクションコード一覧に該当トランザクションコードがはいっていないかをチェックされます。
  4. 追加権限チェック
    SE93で該当トランザクションに追加権限が割り当てられた場合、それがチェックされます。
  5. 割当権限チェック
    SU24で該当トランザクションに権限オブジェクトを割り当て且つチェックフラグを設定された場合、それがチェックされます

レポートクラスの開始

レポートに権限クラスを割り当てることによって、追加権限チェックを実行することができます。

RFC汎用モジュールの呼出

RFC汎用モジュールがRFCクライアントプログラムまたは他のシステムによって呼び出されると、呼び出されたシステムの権限オブジェクトS_RFC の権限チェックが実行されます。

権限設計は、業務運用でどこかの場面で何かの権限制御をかけなければならないという要件から始まります。 例として、「販売伝票一覧を出力するレポート処理で、ログオンユーザが権限を持っていない販売エリアの伝票を出力しない」という権限制御を取り上げます。

権限オブジェクトの定義

権限オブジェクトV_VBAK_VKOは、例の権限制御を実現できる標準権限オブジェクトです。

権限クラス権限オブジェクト権限項目
SDV_VBAK_VKOVKORG(販売組織)
VTWEG(流通チャネル)
SPART(製品部門)
ACTVT(アクティビティ)

権限チェックの実装

以下の権限チェック処理で、ユーザが権限を持っていない販売エリアのデータが出力対象にならないように制御しております。

  LOOP AT T_VBAK INTO L_VBAK.
    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'	
      ID 'VKORG' FIELD L_VBAK-VKORG	
      ID 'VTWEG' FIELD L_VBAK-VTWEG	
      ID 'SPART' FIELD L_VBAK-SPART	
      ID 'ACTVT' FIELD '03'.	
    IF NOT SY-SUBRC IS INITIAL.	
      DELETE T_VBAK.	
    ENDIF.
  ENDLOOP.