1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 如何设计和使用自定义的权限对象(自定义权限检查函数)

如何设计和使用自定义的权限对象(自定义权限检查函数)

时间:2023-04-25 03:12:06

相关推荐

如何设计和使用自定义的权限对象(自定义权限检查函数)

在sap扩展中用户往往都需要使用自己的权限对象,为了达到次目的,请按下列步骤建立和维护权限对象

1、Create an Anthorization Field(SU20)创建权限对象字段(存储在AUTHX表中)

2、Create an Authorization Object(SU21)创建权限对象

创建权限对象类别(存储在TOBCT表中)

点击对象类别创建权限对象(存储在TOBJ表中),生成SAP_ALL

3、Assign an Authorization Object to an Object Class(SU02或PFCG)

4、权限赋值关系图

user master record

/ ..............................\

auth. profileComposite auth. profile

/.................\ / \

/ \ / \

Authorization Auth. Profile

/ /.................\

5、Call "Authorith-Check" in Program to Check Authorization.

这是我编写针对具体权限对象替代Authorith-Check的函数

form. zcustcheckauth using value(z_vkbur) like vbak-vkbur

z_return type i.

data: wa_ust12 like ust12.

data: bgetsubfile(1) type c.

data: begin of db_file occurs 10,

profile like ust04-profile,

typ like usr10-typ,

end of db_file.

data: begin of mid_db_file occurs 10,

profile like ust04-profile,

typ like usr10-typ,

end of mid_db_file.

data: begin of db_file_end occurs 10,

profile like ust04-profile,

end of db_file_end.

data: begin of db_auth occurs 10,

objct like ust10s-objct,

auth like ust10s-auth,

end of db_auth.

z_return = 4.

select ust04~profile usr10~typ

into corresponding fields of table db_file

from ust04

inner join usr10 on usr10~profn = ust04~profile

and usr10~aktps = 'A'

where ust04~bname = sy-uname.

refresh mid_db_file.

clear mid_db_file.

loop at db_file.

if db_file-typ <> 'C'.

db_file_end-profile = db_file-profile.

append db_file_end to db_file_end.

else.

bgetsubfile = 'X'.

append db_file to mid_db_file.

endif.

endloop.

refresh db_file.

clear db_file.

while bgetsubfile = 'X'.

bgetsubfile = space.

select ust10c~subprof as profile usr10~typ

into corresponding fields of table db_file

from ust10c

inner join usr10 on usr10~profn = ust10c~subprof

and usr10~aktps = 'A'

for all entries in mid_db_file

where ust10c~profn = mid_db_file-profile.

refresh mid_db_file.

clear mid_db_file.

loop at db_file.

if db_file-typ <> 'C'.

db_file_end-profile = db_file-profile.

append db_file_end to db_file_end.

else.

bgetsubfile = 'X'.

append db_file to mid_db_file.

endif.

endloop.

refresh db_file.

clear db_file.

endwhile.

select objct auth into corresponding fields of table db_auth

from ust10s

for all entries in db_file_end

where ust10s~aktps = 'A' and ust10s~profn = db_file_end-profile.

select von bis into corresponding fields of wa_ust12

from ust12

for all entries in db_auth

where ust12~aktps = 'A' and ust12~field = 'VKBUR'

and ust12~objct = db_auth-objct

and ust12~auth = db_auth-auth.

if ( wa_ust12-bis ne space ).

if ( z_vkbur ge wa_ust12-von ).

if ( z_vkbur le wa_ust12-bis ).

z_return = 0.

exit.

endif.

endif.

elseif ( z_vkbur = wa_ust12-von ).

z_return = 0.

exit.

elseif ( '*' = wa_ust12-von ).

z_return = 0.

exit.

endif.

endselect.

endform.

调用的方法

*&---------------------------------------------------------------------*

*& Form USEREXIT_CHECK_VBAK

*&---------------------------------------------------------------------*

* *

* This Userexit can be used to add additional logic for *

* checking the header for completeness and consistency. *

* *

* US_DIALOG - Indicator, that can be used to suppress *

* dialogs in certain routines, e.g. in a *

* copy routine. *

* *

* This form. is called from form. VBAK_PRUEFEN. *

* *

*---------------------------------------------------------------------*

form. userexit_check_vbak using us_dialog.

*{ INSERT DEVK901354 1

data: z_s_vkbur like knvv-vkbur.

data: z_auth_check type i value 4.

if sy-tcode = 'VA01' or

sy-tcode = 'VA02'.

authority-check object 'V_VBKA_VKO'

id 'VKORG' dummy

id 'VTWEG' dummy

id 'SPART' dummy

id 'VKBUR' field vbak-vkbur

id 'VKGRP' dummy

id 'KTAAR' dummy

id 'ACTVT' dummy.

if sy-subrc ne 0.

message e900(zdev).

endif."不能创建非主管商家订单

if sy-tcode eq 'VA01'.

select single vkbur into z_s_vkbur

from knvv

where knvv~kunnr = vbak-kunnr

and knvv~vkorg = vbak-vkorg

and knvv~vtweg = vbak-vtweg

and knvv~spart = vbak-spart

and knvv~vkbur = vbak-vkbur.

if sy-subrc ne 0.

message e001(zdev).

endif.

endif.

else.

perform. zcustcheckauth using vbak-vkbur z_auth_check.

if z_auth_check ne 0. "如果没有权限,取当前商家主管销售组

select single vkbur into z_s_vkbur

from knvv

where knvv~kunnr = vbak-kunnr.

if sy-subrc ne 0.

message e001(zdev).

endif. "检查当前商家主管销售组是否在用户权限内

z_auth_check = 4.

perform. zcustcheckauth using z_s_vkbur z_auth_check.

if z_auth_check ne 0.

message e900(zdev).

endif.

endif.

endif.

*} INSERT

endform.

来自 “ ITPUB博客 ” ,链接:/166523/viewspace-63/,如需转载,请注明出处,否则将追究法律责任。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。