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.)中添加全局权限检查,确保用户进入事务码时就验证权限。
四、测试验证步骤
- 使用无目标公司代码权限的用户登录系统;
- 执行
CONFIRM/UPDATE操作,确认是否弹出权限错误提示; - 再次核对SU24配置与角色权限,确保参数正确且角色已激活。
内容的提问来源于stack exchange,提问作者NG SUIT YAN
相关产品推荐
相关产品推荐

