1. 權(quán)限要求
| 授權(quán)對(duì)象 | 字段 | 檢查值 |
|---|---|---|
| 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程序用戶的權(quán)限
???????與使用邏輯數(shù)據(jù)庫讀取數(shù)據(jù)不同,運(yùn)行時(shí)在ABAP/4程序中使用SQL語句處理數(shù)據(jù)不會(huì)觸發(fā)權(quán)限檢查(參見《邏輯數(shù)據(jù)庫的優(yōu)點(diǎn)》)。因?yàn)殚_放式SQL和自身的SQL語句允許無限制地訪問所有數(shù)據(jù)庫表,所以這將帶來問題。
???????不是要為所有用戶授予在ABAP/4程序中使用SQL語句訪問所有數(shù)據(jù)的權(quán)限。但是,發(fā)布程序之后,所有具有該程序使用權(quán)限的用戶都能啟動(dòng)它。所以,作為編寫SQL報(bào)表程序的程序員有責(zé)任檢查調(diào)用該程序的用戶是否有權(quán)訪問將在其中處理的數(shù)據(jù)。
要在ABAP/4程序中檢查用戶權(quán)限,請(qǐng)使用AUTHORITY-CHECK語句,如下所示:
語法:
**AUTHORITY-CHECK OBJECT '<object>'
ID '<name1>' FIELD <f1>
ID '<name2>' FIELD <f2>
...........
ID '<name10>' FIELD <f10>.
<object>是即將檢查的授權(quán)對(duì)象的名稱。
必須在ID后列出在<object>中定義的所有授權(quán)字段的名稱(<name1>,<name2>....)。
必須在<f1>,<f2>....中為即將檢查的權(quán)限輸入值以作為變量或字母。
然后,該語句將為命名的對(duì)象搜索該用戶的參數(shù)文件,以檢查該用戶是否有<f>中所有值的授權(quán)。
然后SY-SUBRC將設(shè)置為0。可用DUMMY替換.FIELD<f>跳過字段的檢查。
必須檢查系統(tǒng)字段SY-SUBRC中的內(nèi)容來檢查AUTHORITY-CHECK的結(jié)果并作出相應(yīng)的動(dòng)作。
有關(guān)可能的返回代碼值的列表和詳細(xì)信息,請(qǐng)參考AUTHORITY-CHECK的關(guān)鍵字文檔。
假設(shè)存在權(quán)限對(duì)象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.
如果用戶有下列關(guān)于F_SPFLI的權(quán)限:ACTVT01-03、NAMEAA-LH、CITYnone,
并且SPFLI-CARRID不處于“AA”和“LH”之間,權(quán)限檢查將終止SELECT循環(huán)。