1. 权限要求
授权对象 | 字段 | 检查值 |
---|---|---|
M_MSED_WMB | WERKS | 物料凭证:工厂 |
AUTHORITY-CHECK OBJECT 'M_MSED_WMB'
ID 'WERKS' FIELD p_werks. "p_werks为键入值
IF sy-subrc <> 0.
* MESSAGE e044(zmsgmm01) WITH p_werks.
ENDIF.
9)、检查ABAP/4程序用户的权限
与使用逻辑数据库读取数据不同,运行时在ABAP/4程序中使用SQL语句处理数据不会触发权限检查(参见《逻辑数据库的优点》)。因为开放式SQL和自身的SQL语句允许无限制地访问所有数据库表,所以这将带来问题。
不是要为所有用户授予在ABAP/4程序中使用SQL语句访问所有数据的权限。但是,发布程序之后,所有具有该程序使用权限的用户都能启动它。所以,作为编写SQL报表程序的程序员有责任检查调用该程序的用户是否有权访问将在其中处理的数据。
要在ABAP/4程序中检查用户权限,请使用AUTHORITY-CHECK语句,如下所示:
语法:
**AUTHORITY-CHECK OBJECT '<object>'
ID '<name1>' FIELD <f1>
ID '<name2>' FIELD <f2>
...........
ID '<name10>' FIELD <f10>.
<object>是即将检查的授权对象的名称。
必须在ID后列出在<object>中定义的所有授权字段的名称(<name1>,<name2>....)。
必须在<f1>,<f2>....中为即将检查的权限输入值以作为变量或字母。
然后,该语句将为命名的对象搜索该用户的参数文件,以检查该用户是否有<f>中所有值的授权。
然后SY-SUBRC将设置为0。可用DUMMY替换.FIELD<f>跳过字段的检查。
必须检查系统字段SY-SUBRC中的内容来检查AUTHORITY-CHECK的结果并作出相应的动作。
有关可能的返回代码值的列表和详细信息,请参考AUTHORITY-CHECK的关键字文档。
假设存在权限对象F_SPFLI和字段ACTVT、NAME及CITY。
SELECT * FROM SPFLI.
AUTHORITY-CHECK OBJECT 'F_SPFLI'
ID 'ACTVT' FIELD '02'
ID 'NAME' FIELD SPFLI-CARRID
ID 'CITY' DUMMY.
IF SY-SUBRC NE 0\.
EXIT.
ENDIF.
ENDSELECT.
如果用户有下列关于F_SPFLI的权限:ACTVT01-03、NAMEAA-LH、CITYnone,
并且SPFLI-CARRID不处于“AA”和“LH”之间,权限检查将终止SELECT循环。
网友评论