WebDynpro应用中权限检查的位置与实现(控制控件启用/禁用)
Web Dynpro权限控制实现方案
1. 权限检查的核心执行位置
- 视图WDDOINIT方法:这是用户进入屏幕时最先触发的初始化方法,适合做一次性权限校验。在这里完成检查后,将结果存到上下文,后续控件直接绑定即可。
- 组件控制器WDDOINIT方法:如果多个视图共用同一套权限逻辑,把检查放在组件控制器的初始化方法里,结果存入组件级上下文,所有视图可直接复用,避免重复执行权限检查。
2. 具体实现步骤
步骤1:创建上下文属性存储权限结果
在视图或组件控制器的上下文里,新增布尔类型的属性,比如EDIT_AUTHORIZED、DELETE_AUTHORIZED,用来存储对应操作的权限校验结果。
步骤2:编写权限检查代码
在选定的初始化方法中插入AUTHORITY-CHECK OBJECT逻辑,示例代码如下:
DATA: lv_edit_authorized TYPE abap_bool. " 检查修改权限(ACTVT=02对应Change操作,根据你的权限配置调整) AUTHORITY-CHECK OBJECT 'Z_YOUR_AUTH_OBJECT' ID 'ACTVT' FIELD '02'. IF sy-subrc = 0. lv_edit_authorized = abap_true. ELSE. lv_edit_authorized = abap_false. ENDIF. " 将校验结果赋值给上下文属性 wd_context->set_attribute( name = 'EDIT_AUTHORIZED' value = lv_edit_authorized ).
注:ACTVT常用值参考:01=Create、02=Change、03=Display、06=Delete,需与你的权限对象配置一致。
步骤3:绑定控件状态到上下文属性
- 按钮控件:找到按钮的
enabled属性,直接绑定到对应的权限上下文属性(比如EDIT_AUTHORIZED),有权限时按钮启用,无权限时禁用。 - 输入字段:找到字段的
readOnly属性,绑定到NOT EDIT_AUTHORIZED(因为readOnly为true时字段不可编辑,正好匹配无权限的场景)。
3. 特殊场景处理
- 动态权限更新:如果用户操作过程中权限可能发生变化(比如角色调整),可在视图的
WDDOAFTERACTION方法中重新执行权限检查,确保控件状态实时同步。 - 代码复用:若多个操作需要检查同一权限对象,可在组件控制器封装一个通用方法(比如
CHECK_AUTHORITY),传入ACTVT参数返回布尔结果,减少重复代码。
内容的提问来源于stack exchange,提问作者lerugoff
相关产品推荐
相关产品推荐

