ABAP开发-权限控制
文章目录
- @[TOC](文章目录)
- 前言
- 一、概念介绍
- 二、常规应用
- 三、实例
- 总结
文章目录
- @[TOC](文章目录)
- 前言
- 一、概念介绍
- 二、常规应用
- 三、实例
- 总结
前言
一、概念介绍
- SAP系统权限:某SAP操作用户能在SAP系统中做哪些操作
通俗来讲就是,用户A只能查看物料信息,在SAP系统中就分配事务码MM03给A,SAP的权限控制是控制到字段级的,即:其权限控制机制可以检查你是否有权限维护某张透明表的某一个字段 - 用户User:具体操作SAP系统的用户,使用事务码SU01创建新的用户ID,默认的权限是空白的,不允许任何操作
- 角色:权限管理系统中的一个中间层,用于将用户与权限关联起来。角色通常代表了一组具有相同职责和权限的用户集合。通过定义角色,可以将一组权限分配给多个用户,而无需为每个用户单独设置权限。这大大提高了权限管理的效率和灵活性。
- 单一角色:一个事务码的集合,其中包含了控制事务码操作的“权限对象”、“权限字段”以及允许的操作及允许的值
- 复合角色(通用角色):多个单一角色的集合,复合角色中可以包含多个单一角色,此复合角色包含了着多个单一角色所控制的权限,还可以维护具体的“权限对象”、“权限字段”以及允许的字段值及字段操作,用事务码PFCG维护
举个栗子:单一角色:IT部员,复合角色:IT经理;每个IT部员所操作的权限范围不同,而IT经理可以具备多部员的权限,经理的权限就是多位部员的权限的集合,即在经理的权限中添加多位部员的权限即可
- 权限对象:指需要被访问或操作的数据实体或资源。例如,一个电子商务网站中的商品、订单、用户信息等都可以是权限对象。权限对象通常是系统中最基本的权限管理单元,用于定义哪些数据或资源可以被访问或操作
用户、角色、权限对象间的关系:
例如:公司中有财务和销售两职位,那就把财务涉及到的权限对象都放到“财务”角色中,把销售涉及到的权限对象都放到“销售”角色中,若一个人是财务人员,那就把“财务”角色分配给这个人,可以把很多个角色分配给一个用户,让这个用户可以拥有这个角色所对应的权限
- 权限字段:权限对象中的具体属性或字段,用于进一步细化权限控制。例如,在商品对象中,价格、库存、描述等都可以是权限字段
- 允许的操作:指用户可以对权限对象或权限字段执行的具体行为
- 允许的值:指在特定操作下,权限字段可以接受的取值范围。例如,对于商品的价格字段,可能只允许管理员将其设置为正数,而普通用户则无权更改价格
二、常规应用
SAP权限设置常用的TCODE
SU01:创建用户(SU01,SU02,SU03)
SU22:查看事务码中的权限对象(SU20,SU21,SU22)
PFCG:创建角色
SU53:权限测试
1、 SU01:
这里我显示用户
在缺省值选项卡中可以设置登录语言、十进制计数法、日期格式、时间格式、时区等
角色选项卡中显示该用户可以干什么,有哪些角色
2、SU22查看事务码中的权限对象:
输入一个事务码va03,点击执行
权限对象列显示要检查的VA03事务码的权限对象
选中一个权限对象-》点击“对象”-》显示对象定义
下面的权限字段有:销售凭证类型、作业
根据销售凭证类型来判断他有哪些作业的权限
作业代表能做哪些事情,点击作业那行的眼镜,可看到能添加或创建、更改、显示…
SU21中根据某个权限对象查看用户有无这个权限
例如根据权限对象F_BKPF_BUK
根据公司代码来看有无会计核算凭证的权限
若要看公司代码1010有无财务过账的权限,即要查公司代码作业有无=10的权限,若有,就能对1010这个公司进行财务过账,若没有,则不能过账
3、PFCG:创建角色
可以在SU01中点击选项卡“角色”,再双击某个角色,可直接进到PFCG中查看,也可复制该角色名称,打开PFCG,输入该角色名称,也可打开该角色,查看该角色
4、SU53:权限测试
要会查某用户是否因为没权限所以做不了某个操作
SU53会把该用户所有权限检查失败的信息记录列出来,权限检查的结果列中会显示“权限检查失败”;
可以点击红框“不同用户显示”,切换用户
三、实例
标准权限对象的使用
业务逻辑:
给ZYT36_ZMM001_36130这个程序,添加公司的权限对象检查(检查有没有权限去查看这个公司代码下的采购订单)
(1)使用SU21查看权限对象:F_BKPF_BUK,发现该权限对象下有权限字段公司代码,所以说明“检查有没有权限去看这个公司代码下的采购订单”这个需求是合理的
并且,‘查看’这个权限的作业是‘03’
(2)在报表里添加权限对象检查,权限检查失败是E类型消息提示,Actct的所有值存储在表TACT中
在读取数据之前添加检查!!
PERFORM FRM_CHECK_AUTH."检查用户权限
双击FRM_CHECK_AUTH,创建子例程
放到F01中
用模式,选择权限检查
系统自动带出代码
AUTHORITY-CHECK OBJECT是做权限检查的关键字,后面跟的是权限对象的检查名字’F_BKPF_BUK’,有两个字段‘BUKRS’和‘ACTVT’
BUKRS后面填充用户输入的值,可在S01中去看,是P_BUKRS;
ACTVT后面填充“查看”的这个权限----03(在SU21中查看作业代码)
修改后的代码如下:
FORM frm_check_auth .AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'"权限对象的名字ID 'BUKRS' FIELD p_bukrs"根据某个字段来进行检查ID 'ACTVT' FIELD '03'."可以到SU21中查看都有哪些作业,根据需求决定作业代码IF sy-subrc <> 0."如果SY-SUBRC不等于0,说明权限检查失败,抛异常MESSAGE
* Implement a suitable exception handling here"不报E类型的message,因为如果是E类型的,程序终止,用户没有办法继续修改输入值进行操作MESSAGE s007 DISPLAY LIKE 'E'."报S类型的,但显示起来像ELEAVE LIST-PROCESSING."让程序停止,不显示下面的列表ENDIF.
ENDFORM.