事務碼:SU01,用戶主數據的維護,可以創建、修改、刪除、鎖定、解鎖、修改密碼等
缺省:可以設置用戶的起始菜單、登錄的默認語言、數字顯示格式、以及日期和時間的格式設置
參數:SAP很多屏幕字段都會對應一個指定的參數ID,該參數ID及值一般存儲在SAP所劃分的內存區域中,在SAP GUI啟動時會自動讀取,並作為默認值自動賦值給屏幕上相關字段中,如SD中銷售組織參數ID為VKO,HR國家分組參數ID為MOL:
注:一個角色只對應一個參數文件
用戶的權限菜單是通過權限角色分配來實現的
事務碼:PFCG
SAP針對不同的功能模塊提供了很多內置的角色,如SD模塊的權限角色名都是以 SAP_SD 為前綴,HR模塊以 SAP_HR為前綴。
在實際應用中,往往會開發很多的工具和報表,並且需要對這些特定的程序進行權限分配,本節將通過新建一個自定義的角色來介紹用戶角色權限維護細節。
角色維護又分為單一角色和復合角色,單一角色是一個獨立的權限對象,而復合角色可以由多個單一角色組合而成,能夠同時繼承不同單一角色的權限。下面創建一個SD的角色:
上面分配完菜單後,就實現了在用戶菜單中能看到的相關事務碼菜單項,但是能否操作菜單中所對應事務的業務數據還得設置具體的權限數據:
為某個角色分配具體的權限數據後,會自動產生一個參數文件,SAP在執行中會通過讀取該參數文件的數據來進行用戶權限的檢查及管控。
在進行更改“權限數據”前,先簡單了解一下SAP的權限對象(權限對象設置好後,需要綁定到事務碼上,然後在ABAP程序中是通過AUTHORITY-CHECK OBJECT語句來做權限檢查的,這樣權限對象就起作用了):
在SAP實際應用中,用戶所直接操作的是屏幕及屏幕所對應的字段,而這些具體字段都是由權限對象進行控制,包括該字段所允許的操作及允許的值(數據)。
本例中為角色分配了事務VA01——創建銷售訂單,在創建銷售單時需要輸入具體的組織級別,在“權限”頁簽中單擊“更改權限數據”按鈕,系統將自動抓取該角色菜單中所分配的所有事務碼所對應的權限對象,會彈出一個定義組織級別對話框,要求用戶輸入具體的業務數據控制范圍,如:
為權限字段分配值可以是單個值,也可以是某個取值范圍,輸入符號“*”表示為該字段允許所有值,也可以單擊對話框右下角的“完全權限”按鈕,為還沒有分配的值的字段分配值。注:這個界面填充的值會帶到下一界面,也可以在這裡什麼不輸,而是直接到下一界面輸入,這裡只是將所分配的事物碼所涉及的權限對象的權限字段集中在這是輸入值,只是為了方便
SAP角色的權限分配是從權限對象直接派生過來的,可以在不同的權限角色中同時調用同一權限對象,並為所生成對象分配定義不同的權限值。
點擊“保存”後,SAP會將權限對象以及所維護的權限值以樹狀結構分層列出,最頂級為對象類,對象類是同類屬性的權限對象的集合,一個對象類可以包含多個權限對象。在權限角色維護頁面的主菜單中執行“實用程序|技術名稱打開”命令,將在每個字段的右邊顯示所有的對象類名稱及權限對象名稱:
該界面通過狀態燈來表示各權限對象維護狀態,綠燈代表激活,黃色表示未激活,紅色代表未給權限字段分配值,單擊權限字段前的鉛筆可以定義該字段的授權值:
權限對象維護完成後,節點的狀態燈會變為綠色,單擊“保存”按鈕後會彈出一個“為生成權限參數文件分配參數文件名稱”對話框:
再點擊,激活權限數據,返回到角色維護界面,可以看到生成的權限參數文件:
先創建新的用戶 800USER02 但角色與參數文件都為空:
(注:當角色創建好以後,除了在PFCG裡分給其他用戶外,實質上可以直接通過SU01來對某用戶進行角色的分配:
,當分配好角色時,該角色所帶的參數文件也會自動帶過來放在參數文件Tab中,但你也可以在參數文件中還可以直接將其他的參數文件加進來,如SAP_ALL、SAP_NEW參數文件)
由於沒有賦任何權限,所以此時800USER02沒有任何權限:
單擊“用戶比較”按鈕,將彈出“比較角色用戶主數據記錄”對話框:
點擊“完成比較”,該用戶所對應的權限角色將正式生效。
完成後,再去查看 800USER02 用戶的角色與參數文件頁簽,發現已關聯上了:
通過上面的設置後,800USER02用戶才有權執行VA01、VA02兩個事務碼,但是,由於前面數據權限字段“銷售憑證類型”沒有設置任何值,所以在創建時還是會報錯:
可以將該憑證類型值加上即可:
前面已經介紹了如何在權限角色中維護SAP所提供的標准權限對象,本節介紹如何自定義權限對象。
SU20:權限字段清單,可以新增、修改、刪除權限字段,可以浏覽該字段具體被哪些權限對象所調用。
SU21:維護權限對象,可以創建和維護權限類、權限對象,權限字段在該事務碼中被分配到權限對象
SU22:維護權限對象的分配,可以通過該事務碼為具體事務分配權限對象
創建權限字段:
對象類是多個權限對象的集合,而一個權限對象又可以分配多個權限字段,對象類和權限對象都是通過事務碼SU21來維護的。
一旦新增了用戶的自定義權限對象後,需要單擊工具欄中的按鈕,將把新增的權限對象賦值給 SAP_ALL 這個權限參數文件。
創建對象類:
創建權限對象:
SU22:通過該事務碼還可以查詢某個事務有哪些權限對象
為了下面的演示,創建一個HELLO程序事務代碼ZJZJ_HELLO:
輸入事務碼ZJZJ_HELLO後,執行該程序後進入權限對象分配頁面,對於新增的事務,SAP都會默認分配一個S_TCODE權限對象,用於管控用戶操作是否存在該事務的權限:
可為權限字段設置默認值,這些值會在角色權限分配時自動帶出:
通過上面創建完自定義的權限對象ZS001,並將它與事務代碼ZJZJ_HELLO綁定,這樣就可以將該事務代碼分配到角色菜單中了(注:到目前為止,上面只是設置了某個事務碼具體的權限數據,要使用這些權限數據的起作用,還得要通過該事務碼所對應的ABAP程序來檢查所分配的權限對象的權限數據,標准的Tcod不需另寫ABAP,默認對應的ABAP程序已經實現了?)
權限對象(Authorization Object),權限字段(Authorization Field),允許的操作(Activity),允許的值(Field Value)
角色包含了若干權限對象,在透明表AGR_1250中有存儲二者之間的關系;權限對象包含了若干權限字段、允許的操作和允許的值,在透明表 AGR_1251中體現了ROLE/Object/Field/Value之間的關系;有一個特殊的權限對象用來包含了若干事務碼。這個權限對象叫 “S_TCODE”,該權限對象的權限字段叫“TCD”,該字段允許的值(Field Value)存放的就是事務代碼;有一種特殊的權限字段用來表示可以針對該權限對象做哪些操作,是允許創建、修改、顯示、刪除或者其他呢,該權限字段叫 “ACTVT”,該字段允許的值(Field Value)存放的就是允許操作的代碼,01代表創建、02代表修改、03代表顯示等;SAP 系統自帶了若干權限對象、默認控制了若干權限字段(對應到透明表的某些字段)。可以用事務碼SU20來查看系統有哪些權限字段,用SU21來查看系統有哪些默認的權限對象。於是我們知道了事務代碼與權限對象的區別。從權限控制的范疇來看,事務代碼屬於一種特殊的權限對象;一個事務代碼在執行過程中,為了判斷某個ID是否有權限執行此事務代碼,還可能檢查其他若干普通的權限對象。使用SU22來查看某個事務代碼包含了哪些權限對象。在透明表USOBX中,存放了事務碼與權限對象的對應關系。
自定義權限對象
上文所說的系統自帶權限對象與權限字段僅能滿足有限的需要,其權限審核的邏輯也是系統硬編碼了的,我們能做的只是是否啟用某項權限對象的檢查(使用SU22)。如果需要自定義,通過SU20、SU21定義即可。調用的時候在程序中加入類似代碼:
AUTHORITY-CHECK OBJECT 'Z_VKORG' ID 'VKORG' FIELD 'REC_VKORG-VKORG'.
IF SY-SUBRC <> 0.
MESSAGE 'No Authorization!' TYPE 'E'.
ENDIF.
控制用戶是否可以修改、創建、查看報表
上面(為角色分配菜單權限/為角色分配權限數據)是根據你選擇的事務碼(菜單)後,再進“權限”Tab點擊“更改權限數據”時,會自動搜集該事務碼所用到的權限對象所用來的組織結構權限字段羅列出來,在彈出組織級別值維護框中輸入權限范圍,則在角色權限數據維護樹裡,這會自動會使用這些值(當然也可以不在此框中進行設定,直接跳到角色權限數據維護樹裡進行設置)。我們這裡是給報表設置權限,沒有對應於哪個具體的TCD,所以只能過角色模板(角色模板其實就是為了控制某個應用功能所需要的權限對象集),或者在知道某個應用需要哪些權限對象時手動加入這些權限對象而不需要通過模塊來設置。