在ABAP开发中,权限是一种用于保护功能或对象的方法。 开发人员确定在哪里检查授权以及如何检查。 用户管理员确定哪些用户可以执行该功能或访问对象。
核心概念:
权限字段
权限对象中的最小单位。 权限字段可以代表数据,例如数据库表中的关键字段,也可以代表活动,例如读取或创建。 活动被指定为 ID,它们存储在数据库表 TACT 和客户特定表 TACTZ 中。
通过SU20创建权限字段
权限对象
权限是基于存储库对象。 一个权限对象最多包含 10 个权限字段。 代表数据和活动的权限字段的组合用于授予和检查权限。 权限对象分配给权限对象类。
通过SU21创建权限对象类和权限对象
权限
作为权限配置文件一部分的用户主记录中的条目。 权限由权限对象中权限字段的完整值或通用值组成。 该组合决定了用户可以使用哪些活动来访问某些数据。它们是从事务 PFCG(用于角色编辑的配置文件生成器)生成的。 它们也可以使用事务 SU03 显示。
权限配置文件
多个权限的组合。 可以将多个权限配置文件分配给单个权限。 通过在用户主记录中指定权限配置文件,将权限分配给用户。
它们是从事务 PFCG(用于角色编辑的配置文件生成器)生成的。 它们也可以使用事务 SU02 显示。
用户主记录
在用户可以登录到 AS ABAP 之前,用户主记录必须存在。 主记录确定允许用户执行哪些操作以及分配给他们哪些权限。 默认设置(例如小数位在列表中的显示格式)也存储在用户主记录中。 权限配置文件可以多次分配给用户。它们在事务 SU01 中进行编辑。
权限检查
用于确定程序的当前用户是否具有一定权限的检查。 该检查将一个值与用户主记录中权限对象的每个权限字段中的相应条目进行比较。 检查指示器控制是否执行权限检查。
使用 ABAP 语句 AUTHORITY-CHECK 显式或隐式进行权限检查。 例如,通过在 SAP GUI 的命令字段或 LEAVE TO TRANSACTION 或 SUBMIT 等语句中输入事务代码来启动事务时,会进行隐式权限检查
权限图
权限相关事务代码介绍
- SE11:创建域/创建数据元素
- SU20:创建权限字段(非必需,可用系统标准的,除非自定义)
- SU21:创建权限对象
- SE38:新建程序,引用权限对象
- SE91:创建事务代码
- SU24:事务代码分配权限对象
- PFCG:角色分配事务代码,并维护权限字段值
- SU01:分配用户角色
1)SE11创建域/创建数据元素
2)SU20:创建权限字段
3)SU21:创建权限对象
- 先创建类
- 在创建对象
4) SU24:事务代码分配权限对象
5)程序中增加权限检查代码
IF r1 = 'X' OR r2 = 'X'.
AUTHORITY-CHECK OBJECT 'ZPPD003'
ID 'ZCREATE' FIELD '04'.
IF sy-subrc = 0.
MESSAGE e398(00) WITH '你没有创建和修改工单的权限!'.
ENDIF.
ENDIF.
AUTHORITY-CHECK 介绍
AUTHORITY-CHECK OBJECT auth_obj [FOR USER user]
ID id1 {FIELD val1}|DUMMY
[ID id2 {FIELD val2}|DUMMY]
...
[ID id10 {FIELD val10}|DUMMY].
auth_obj : 权限对象
id1-id10:权限字段
FIELD val1:权限字段值
DUMMY:不用检查该字段
FOR USER user :对哪些用户
sy-subrc | Meaning |
0 | 权限检查成功或未进行检查。 在用户主记录中找到权限对象的授权。 它的值集包括指定的值。 |
4 | 权限检查不成功。 在用户主记录中为权限对象找到一个或多个权限,它们包括值集,但没有指定的值,或者权限字段不正确或指定的字段过多。 |
12 | 在用户主记录中未找到权限对象的授权。 |
24 | 不设置此返回码。 |
40 | 在用户中指定了无效的用户 ID。 |