Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3587646
  • 博文数量: 1575
  • 博客积分: 19423
  • 博客等级: 上将
  • 技术积分: 16102
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-19 21:36
个人简介

专注专心

文章分类

全部博文(1575)

文章存档

2020年(10)

2018年(7)

2016年(6)

2015年(21)

2014年(32)

2013年(279)

2012年(516)

2011年(309)

2010年(260)

2009年(92)

2008年(15)

2007年(28)

我的朋友

分类: IT职场

2013-07-06 07:43:25

SAP权限对象文集

SAP的权限是通过授权对象来控制的,所有的事务码、角色等最终反映在系统中都是授权对象。在SAP中运行事务码时,系统首先会检查S_TCODE这个授权事务中是否有指定的事务码,如果有,你才能使用这个TCODE。但这里通过后,并不代表你可以将所要操作的业务进行完毕,在不同的地方,系统还会检查其他的授权对象,比如在操作到与会计凭证的公司代码相关的事务时,系统会检查f_bkpf_buk 这个授权对象,只有这个检查通过后,才能继续往下走。


系统检查授权对象的代码一般为:


    AUTHORITY-CHECK OBJECT f_bkpf_buk for user zhangsan01


      ID 'ACTVT' FIELD act_hinz


      ID 'BUKRS' FIELD bkpf-bukrs.


    IF sy-subrc NE 0.


      MESSAGE e083 WITH bkpf-bukrs.


    ENDIF.


这个语句检查的是张三(zhangsan01)是否有f_bkpf_buk这个授权对象的权限,如果不要for user zhangsan01,则表示检查当前用户的权限。


注意这里只检查授权对象,没有单一角色和复合角色,也就是说虽然我们给用户分配了很多角色,但系统最终检查的是这些角色的授权对象,而且是不分角色的授权对象。这样就会造成权限重叠的情况。


比如张三有A公司凭证查看的权限,又有B公司凭证过帐的权限,如果他同时还有S_TCODE:FB01的授权对象,这时候他就是有A、B两家公司的过帐和查看权限。所以,分配权限的时候得注意了。

使用事务码SE93查看权限对象;
添加完事务码后没有带出授权对象,就是因为这个事务码下没有包含权限对象

用SU01新建一个ID时,默认的权限是空白,即这个新建的ID不能做任何事情,不能使用任何事务代码。这样只需要为相应的ID赋上相应的TCODE,即可实现“某人能干某事”了,其补集,则是“某人不能干的某些事”。
  但是我们不能直接在SU01里面给某个ID赋上TCODE,要通过ROLE中转一下。即:一堆TCODE组成了一个ROLE,然后把这个ROLE分给某个ID,然后这个ID就得到一堆TCODE了。
  上面这些,仅仅是SAP权限控制的初级概念,要理解SAP权限控制的全部,必须还要明白下面的概念。
  1、角色(ROLE)、复合角色
  上面讲了,角色,即ROLE,是一堆TCODE的集合,当然还包含有TCODE必备的“权限对象”、“权限字段”、“允许的操作”及“允许的值”等。我们使用PFCG来维护角色。
  一个复合角色可以包含多个单个的角色。
  具体请看下面的概念。
  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后的SY-SUBRC返回值的不同也代表着不同的意思,这里稍微归总一下:
0
权限check成功
4
用户无这样的权限
8
在写ABAP authority-check时,指定太多的ID(最多只能有10个)
12
用户信息中不存在这样的authority object
16
用户信息中不存在这样的profile
24
指定的fild名字与authority-object中ID需要的field不匹配
28
用户信息不正确
32
用户信息不正确
36
用户信息不正确
1.su20  创建权限对象字段  例子: ZPOWERFLD1
    创建权限对象字段(存储在AUTHX表中),指定表中的数据元素。
2.su21  创建权限对象类和权限对象  例子:对象类:选择了默认的WG零售  对象:ZPOWER1
    创建权限对象类别(存储在TOBCT表中)
    点击对象类别创建权限对象(存储在TOBJ表中),生成SAP_ALL,创建的时候需要填写权限对象字段,还可以加上ACTVT,ACTVT中有很多的值,如02修改,03一般为显示权限
需要马上生效,点击左上角SAP_ALL
3.su01 生成参数文件  例子:ZAUTOPROF
  环境-维护参数文件  输入参数文件名,点击创建参数文件的工作区-进入后新建-进入后输入权限对象和权限(自己起名字,例:ZAUTHO),双击ZAUTHO,可对权限对象下的权限字段的值进行设置(程序中输入的值要在这个值域),注意激活
4.pfcg为角色分配权限 例子:ZROLEA
   新建权限角色,第二栏为菜单,可以添加事务码(可以选择1.添加标准 or 2.报表,本例子选2),第三栏为权限,输入刚建立的参数文件,点击更改授权数据,也可以看到设置的值,最后点击生成(即:皮球),第4栏为用户,输入想要设置权限的用户,指定有效期。
5.su01 添加参数文件和角色给用户
  参数标签输入参数文件,角色标签输入刚建的角色。
6.程序中书写  例子:    Z_AUTHORITY_TEST
  在程序中加上类似代码:
REPORT  Z_AUTHORITY_TEST.
DATA: L_STR(30) TYPE C.
SELECTION-SCREEN BEGIN OF BLOCK B3 .
SELECTION-SCREEN COMMENT 1(10) TEXT-003.
PARAMETERS:P_CARRID LIKE SPFLI-CARRID.
SELECTION-SCREEN END OF BLOCK B3.
AT SELECTION-SCREEN.
"su21 新建WG对象类下的ZPOWER1授权对象 ,将su20创建的ZPOWERFLD1给授权对象
AUTHORITY-CHECK OBJECT 'ZPOWER1'             
"su20 ZPOWERFLD1 授权对象字段,对应的是SPFLI-SCARR
ID 'ZPOWERFLD1' FIELD P_CARRID . 
  IF SY-SUBRC <> 0.
    CONCATENATE P_CARRID '您没有权限!' INTO L_STR.
    MESSAGE L_STR TYPE 'E'.
    EXIT.
  ENDIF.
7.su24 查找一个事务的授权对象
   在SU24中为事务码添加权限对象,一般在se93中添加的那一个权限对象会在你点击事务码之后自动出现
   若是事务码有多个权限控制对象,需要自



在项目中,难免要使用到自定义的权限对象,如对利润中心的检查,找了好久,没有看到,于是,我就自己建了一个
   刚开始不懂,到处查资料,分为几个步骤,如下:
1.su20
    创建权限对象字段(存储在AUTHX表中)
2.su21  创建权限对象
    创建权限对象类别(存储在TOBCT表中)
    点击对象类别创建权限对象(存储在TOBJ表中),生成SAP_ALL
    这里创建的时候需要填写 权限对象字段,还可以加上ACTVT,ACTVT中有很多的值,如03一般为显示权限
    需要马上生效,点击SAP_ALL
3.程序中书写
  在程序中加上类似代码:
authority-check object 'V_VBKA_VKO'
                     id 'VKORG' p_vkorg
                     id 'ACTVT' '03'.
4.su24
   在SU24中为事务码添加权限对象,一般在se93中添加的那一个权限对象会在你点击事务码之后自动出现
   若是事务码有多个权限控制对象,需要自己手动添加另外的权限对象。
  
    权限对象中有四个标识:
    ? U  C  CM
    当权限对象对应的是C或CM时,控制有效。他们之间的区别在于,CM在PFCG分配权限时会自动带出来,C标记的需要手工分配。
5.pfcg为角色分配权限
   这是属于BASIS的部分,但是开发人员需要了解。选择需要修改的权限角色,第二栏为权限,可以添加事务码,之后在更改用户权限里面,点击授权对象,这时,前面为CM标记的权限对象会出现,标记为C的不会出现,需要手动分配。
6.待分析,se93. se93主要用于分配程序的事务码,这个地方值得注意的就是一般的报表程序都选择第二项。。。否则在程序运行的时候,点击执行,界面就会消失~~这里也有分配权限对象,但是只能填一个,不知道如何处理。
 
  
 
部分参照:**.com/blog/90671


阅读(13340) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~