用SAP Authority Object 对权限控制
早就聽說SAP Authority Object 對權限控制比較好用,今天有幸實踐下。
下面是一個簡單但是完整的Authority-check的小例子:
1.創建Data Element-------(T-Code SE11)
Name: Z_ELE_01
2. 為Z_ELE_01創建一個Domain?-------(T-Code SE11)
一般用現有的Domain就可以了,我這里用CHAR04
<!--[if !vml]-->
<!--[endif]-->
*如果將來希望配置權限的時候是可選的效果,這里就要使用自己創建的Domain。具體方法如下:
a.ME11創建
?
b.設置字段屬性
?
?c.設置可選值
?
3.創建Authorization Fields-----(T-Code SU20)
這里可以做一些設置,將此Field作為可選項或對Search Help做些設置
| Field Name | Z_ATH_FLD_01 |
| Data element | Z_ELE_01 |
? <!--[if !vml]--><!--[endif]-->
4. 創建一個Object class -----(T-Code SU21)
?多個Authorization Object是被歸在一個Authorization Class中的, 其實Class用處不大僅僅是用來歸類Authorization Object而已。所以可以在現有的Class中添加要創建的Authorization Object,當然也可以新建
?
| Object Class | Z_ATH_CLS_01 |
| Text | Authorization class 01 |
?
5. 創建Authorization Object-----(T-Code SU21)
多個Authorization Fields是被歸在一個Authorization Object中的,創建好Object后需要把Z_ATH_FLD_01 assign給它.
?
6. 將Authorization Object Assign到T-Code上/編輯Authorization Object
-----(T-Code SU24)
此步驟可根據需要選擇操作,也就是說Authorization Object不分配到T-code上當然也是可以的。
<!--[if !vml]-->
<!--[endif]-->
<!--[if !vml]-->
<!--[endif]-->
另外,可以用T-Code SU22進行管理
<!--[if !vml]-->
<!--[endif]-->
7.創建Role,設置Role的Authorization Object-----(T-Code PFCG)
?這些其實Basis就可以了,作為Coder只是建立一個Role來測試下是不是成功assign到想要的T-code上了
?
8.創建測試程序
REPORT? ZATH01.
DATA: ZATH_FLD(20) VALUE '01'.
AUTHORITY-CHECK OBJECT 'Z_ATH_OBJ_01'
??????????????? ID ' Z_ATH_FLD_01' FIELD ZATH_FLD.
WRITE:/ ZATH_FLD.
*這個函數只能判斷是否有權限,不能返回權限字段中設置的值
?
9.運行程序
用戶必須先退出系統然后登錄后前面設置的Role才會生效.
?
*今天測試權限費了我好大勁兒,就是因為忘記了權限的繼承用了一個“不干凈”的賬號。
?
?--------------------------------------------網上對于權限的文章-----------------------------
直觀的說,權限就是“某人能干某事”和“某人不能干某事”之合。在SAP系統中,用事務碼(也稱交易代碼、或者TCODE、或者 Transaction Code)表示一個用戶能干的事情。比如MM01這個TCODE是用來維護物料數據的、MIGO是用來收貨的、FS00是用來維護會計科目的等。
??? 用SU01新建一個ID時,默認的權限是空白,即這個新建的ID不能做任何事情,不能使用任何事務代碼。這樣只需要為相應的ID賦上相應的TCODE,即可實現“某人能干某事”了,其補集,則是“某人不能干的某些事”。
??? 但是我們不能直接在SU01里面給某個ID賦上TCODE,要通過ROLE中轉一下。即:一堆TCODE組成了一個ROLE,然后把這個ROLE分給某個ID,然后這個ID就得到一堆TCODE了。
??? 上面這些,僅僅是SAP權限控制的初級概念,要理解SAP權限控制的全部,必須還要明白下面的概念。
??? 1、角色(ROLE)、通用角色(Common Role)、本地角色(Local Role)
??? 上面講了,角色,即ROLE,是一堆TCODE的集合,當然還包含有TCODE必備的“權限對象”、“權限字段”、“允許的操作”及“允許的值”等。我們使用PFCG來維護角色。
??? 為了系統的測試與SAP實施項目的階段性需要,進一步將角色分為“通用角色”和“本地角色”。
??? 舉個例子便于理解:通用角色好比“生產訂單制單員”,本地角色對應就是“長城國際組裝一分廠生產訂單制單員”。所以,本地角色較之通用角色的區別就是,在 同樣的操作權限(事務代碼們)情況下,前者多了具體的限制值。這個限制值可能是組織架構限制,也可能是其他業務的限制。如,一分廠的制單員不能維護二分廠 的制單員;一分廠的制單員甲只能維護類型為A的單據,而不能維護類型為B的單據,諸如此類。
??? 具體請看下面的概念。
??? 2、權限對象(Authorization Object)、權限字段(Authorization Field)、允許的操作(Activity)、允許的值(Field Value)
??? 上文粗略說了構成ROLE的是若干TCODE。其實,在ROLE和TCODE之間,還有一個中間概念“權限對象”:
??? 角色包含了若干權限對象,在透明表AGR_1250中有存儲二者之間的關系;?
??? 權限對象包含了若干權限字段、允許的操作和允許的值,在透明表AGR_1251中體現了ROLE/Object/Field/Value之間的關系;?
??? 有一個特殊的權限對象用來包含了若干事務碼。這個權限對象叫“S_TCODE”,該權限對象的權限字段叫“TCD”,該字段允許的值(Field Value)存放的就是事務代碼;?
??? 有一種特殊的權限字段用來表示可以針對該權限對象做哪些操作,是允許創建、修改、顯示、刪除或者其他呢。該權限字段叫“ACTVT”,該字段允許的值(Field Value)存放的就是允許操作的代碼,01代表創建、02代表修改、03代表顯示等;
??? SAP的權限控制是控制到字段級的,換句話說,其權限控制機制可以檢查你是否有權限維護某張透明表的某一個字段。
??? SAP系統自帶了若干權限對象、默認控制了若干權限字段(對應到透明表的某些字段)。可以用事務碼SU20來查看系統有哪些權限字段,用SU21來查看系統有哪些默認的權限對象。
??? 于是我們知道了事務代碼與權限對象的區別。從權限控制的范疇來看,事務代碼屬于一種特殊的權限對象;一個事務代碼在執行過程中,為了判斷某個ID是否有權 限執行此事務代碼,還可能檢查其他若干普通的權限對象。使用SU22來查看某個事務代碼包含了哪些權限對象。在透明表USOBX中,存放了事務碼與權限對 象的對應關系。
??? 3、自定義權限對象
??? 上文所說的系統自帶權限對象與權限字段僅能滿足有限的需要,其權限審核的邏輯也是系統硬編碼了的,我們能做的只是是否啟用某項權限對象的檢查(使用SU22)。如果需要自定義,通過SU20、SU21定義即可。調用的時候在程序中加入類似代碼:
??? AUTHORITY-CHECK OBJECT 'Z_VKORG' ID 'VKORG' FIELD 'REC_VKORG-VKORG'.?
??? IF SY-SUBRC <> 0.?
??? MESSAGE 'No Authorization!' TYPE 'E'.?
??? ENDIF.
??? 結語:
??? 本文僅對系統本身做了技術性敘述,并未結合業務實際,但是我們有勾勒出了一個大致的權限矩陣,縱向是操作人(ID),橫向是某些權限對象,權限對象再細分成若干事務代碼、允許動作、權限字段及其允許的值等。
??? 而實際業務中是否需要將權限劃分的如此細致,完全取決于某領導的喜好、跳不過的律法、和企業內部的規章制度。
總結
以上是生活随笔為你收集整理的用SAP Authority Object 对权限控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于ABAP流程处理的一些命令的说明(s
- 下一篇: PP部分主数据导出SQVI设置