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

OData服务AUTHORITY-CHECK异常:移除用户权限后仍可访问排查

OData服务DPC_EXT类权限检查失效问题排查

问题回顾

在OData服务的DPC_EXT类中,为todos实体的todosset_get_entity方法实现了基于S_TABU_NAM对象的权限检查,代码如下:

METHOD todosset_get_entity.

    AUTHORITY-CHECK OBJECT 'S_TABU_NAM'
    ID 'ACTVT' FIELD '03'
    ID 'TABLE' FIELD 'ZALM_FS_TODOS'.

    IF sy-subrc <> 0.
      MESSAGE |No Authorization access! | TYPE 'E'.
*     Implement a suitable exception handling here
    ENDIF.

首次测试权限检查生效,但移除用户对应角色(已执行权限失效、重新生成权限文件操作)后,用户仍能获取数据;修改TABLE字段值为ZALM_FS_TODOS或ZALM_FS_USERS时,权限检查结果无差异。

排查及解决步骤

  • 清理用户权限缓存:ABAP系统会缓存用户权限,移除角色后需强制重置。使用事务码SU56,输入用户名后点击「重置用户缓冲区」;或执行代码:CALL FUNCTION 'AUTHORITY_CHECK_RESET_BUFFER' EXPORTING username = sy-uname.
  • 重新生成OData运行时类:打开事务码SEGW,找到对应项目并点击「生成」按钮,重新生成所有相关运行时对象,确保修改的DPC_EXT代码被正确加载。
  • 校验权限对象配置:
    • 用事务码SU01查看用户权限概览,确认是否通过其他角色继承了S_TABU_NAM中目标表的权限
    • 检查角色中S_TABU_NAM的设置,是否存在通配符(如*)导致的全量权限,或移除角色时未彻底删除对应权限条目
  • 清理OData服务缓存:使用事务码/IWFND/CACHE_CLEANUP清理服务缓存,或通过/IWFND/MAINT_SERVICE找到对应服务后点击「清除缓存」
  • 优化权限异常抛出逻辑:原代码使用MESSAGE TYPE 'E'可能在OData场景下未正确终止请求,建议替换为标准异常:
IF sy-subrc <> 0.
  RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
    EXPORTING
      textid = /iwbep/cx_mgw_busi_exception=>authorization_failed.
ENDIF.

内容的提问来源于stack exchange,提问作者MarcL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:58:32