You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAP ABAP中基于事务码的权限检查配置无效,求解决方案

SAP ABAP事务码权限检查失效的解决及代码实现方案

一、先排查SU24配置未生效的核心原因

SU24绑定事务码与权限对象后未生效,通常是以下几点没配置到位:

  • SU24参数确认:进入SU24,输入事务码ZSDI_DRIVER_INFO/ZSDR_DRIVER_INFO,找到权限对象F_BKPF_BUK:
    • 勾选「检查维护」(Check Maintenance);
    • 将字段BUKRS(公司代码)设为「必填」(Required),ACTVT(操作活动)按需设置;
    • 事务码的「检查级别」设为「标准检查」(Standard Check)。
  • 角色权限同步:用PFCG打开用户所属角色,进入「权限」标签页,点击「调整权限」→「从SU24建议」,重新生成权限数据并激活角色。
  • 事务码调用逻辑:自定义事务码不会自动触发权限检查,SU24仅做规则绑定,最终仍需在程序中手动调用检查逻辑。

二、在USER_COMMAND_0100模块中添加权限检查的具体代码

针对你的业务场景,需在CONFIRM(插入)和UPDATE(修改)分支中,分别添加对应操作的权限检查,使用ABAP标准宏AUTHORITY-CHECK实现:

MODULE USER_COMMAND_0100 INPUT.

  CASE ok_code.
    WHEN 'CONFIRM' .
      " 先校验必填字段
      IF gv_bukrs IS INITIAL
        OR gv_icno IS INITIAL
        OR gv_status IS INITIAL.

        MESSAGE 'Please fill in field required.' TYPE 'E'.
        CALL SCREEN '0100'.

      ENDIF.
      
      " 新增:检查创建权限(ACTVT=01对应创建操作)
      AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
        ID 'BUKRS' FIELD gv_bukrs
        ID 'ACTVT' FIELD '01'.
      
      IF sy-subrc <> 0.
        MESSAGE '无该公司代码的创建权限' TYPE 'E'.
        CALL SCREEN '0100'.
      ENDIF.

      CALL TRANSACTION 'ZSDI_DRIVER_INFO'.
      PERFORM check_data.
      
    WHEN 'QUERY'.
      CALL SCREEN '0200'.
      
    WHEN 'UPDATE'.
      " 先校验必填字段
      IF gv_bukrs IS INITIAL
        OR gv_icno IS INITIAL
        OR gv_status IS INITIAL.

        MESSAGE 'Please fill in field required.' TYPE 'E'.
        CALL SCREEN '0100'.
      ENDIF.
      
      " 新增:检查修改权限(ACTVT=02对应修改操作)
      AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
        ID 'BUKRS' FIELD gv_bukrs
        ID 'ACTVT' FIELD '02'.
      
      IF sy-subrc <> 0.
        MESSAGE '无该公司代码的修改权限' TYPE 'E'.
        CALL SCREEN '0100'.
      ENDIF.

      PERFORM check_data2.

    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
  ENDCASE.

ENDMODULE.    

代码关键说明:

  • AUTHORITY-CHECK是ABAP标准权限检查宏,sy-subrc=0表示权限通过,非0则无权限;
  • ACTVT字段值需匹配操作类型:01=创建、02=修改、03=显示,根据事务码实际用途调整;
  • 必须确保gv_bukrs是用户当前输入的公司代码,才能实现精准的权限校验。

三、事务码层面的额外权限防护

若要防止用户直接通过事务码跳过屏幕校验,需在事务码对应程序的初始化模块(如MODULE INITIALIZATION_0100 OUTPUT.)中添加全局权限检查,确保用户进入事务码时就验证权限。

四、测试验证步骤

  1. 使用无目标公司代码权限的用户登录系统;
  2. 执行CONFIRM/UPDATE操作,确认是否弹出权限错误提示;
  3. 再次核对SU24配置与角色权限,确保参数正确且角色已激活。

内容的提问来源于stack exchange,提问作者NG SUIT YAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:54:23