🎯 前言
- 🍉
SU21
创建 权限类,权限对象,分配权限字段- 🌵
PFCG
创建 权限角色,分配权限对象,维护权限对象值- 🍒
SE38
程序中加以限制
🎏 概述
权限字段 - 权限对象 - 权限类 - 权限角色 - 最后将其分配给指定用户
权限字段
权限对象
权限类
权限角色
- 指定用户
PS:The hierarchy only shows the sequence of creating / using, it's not the real hierarchy.
⚙️ 权限配置
所需 TCode
概览:
Step 01 Class
& Object
& Filed
TCode: SU21
创建 [权限类]
创建 [权限对象] 并为 [权限对象] 分配 [权限字段] 和 [权限类]
选择上一张图的 Authorization Object
创建 [权限对象]
为 [权限对象] 分配 [权限字段] 和 [权限类]
PS:当然实际使用场景中需要额外添加 ZACTVT
(作业)字段,这里 DEMO 不做演示,下图为查看字段不同值的含义方法
Step 02 Role
TCode: PFCG
创建权限角色
修改 Authorization Data
为 [权限角色] 分配 [权限对象]
配置 [权限对象] [限制值]
(单值 / 范围区间值)
Generate
将 [权限角色] 分配到 [权限用户]
User Comparison
: 将权限信息写入相应的数据库表中
至此,我们已经完成了 将权限角色分配到指定用户,接下来就是在程序中 实现对用户的权限审核
🌠 权限审核
*&---------------------------------------------------------------------*
*& Report ZMME001
*&---------------------------------------------------------------------*
*& 事务代码:
*& 程序名称:ZMME001
*& 程序目的:
*& 申请人:
*& 设计人:Wriprin
*& 设计时间:2022.07.29
*& 程序类型:REPROT
*& 描述:<div> 权限审核 DEMO </div>
*& (修改日志)------------------------------------------------------------*
*& 日志号 修改人 修改时间 修改说明 传输号码
*& ---- ----- ------ ------- ------
*&---------------------------------------------------------------------*
REPORT zmme001.
*======================================================================*
* TABLES
*======================================================================*
TABLES: t001.
*======================================================================*
* SELECTION-SCREEEN
*======================================================================*
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-t01.
SELECT-OPTIONS: s_bukrs FOR t001-bukrs. " 公司代码
SELECTION-SCREEN END OF BLOCK bk1.
PERFORM frm_auth_check. " 权限检查
*&---------------------------------------------------------------------*
*& Form FRM_AUTH_CHECK
*&---------------------------------------------------------------------*
*& 权限检查
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_auth_check .
RANGES s_bukrs_auth FOR t001-bukrs. " 公司代码
" 查询 T001 底表中的所有 BUKRS
SELECT t001~bukrs " 公司代码
FROM t001
INTO TABLE @DATA(lt_t001).
REFRESH s_bukrs_auth.
s_bukrs_auth-sign = 'I'.
s_bukrs_auth-option = 'EQ'.
* cl_demo_output=>display( sy-uname ).
" 筛选出匹配用户输入的 BUKRS.
LOOP AT lt_t001 INTO DATA(ls_t001) WHERE bukrs IN s_bukrs.
AUTHORITY-CHECK OBJECT 'M_BKPF_BKS' " Authority Object Name
ID 'BUKRS' FIELD ls_t001.
" 筛选出符合权限字段限制的值
IF sy-subrc = 0.
s_bukrs_auth-low = ls_t001-bukrs. " 将所有符合的 BUKRS 赋值
APPEND s_bukrs_auth. " 最终筛选条件
ENDIF.
ENDLOOP.
" 输出[带表头]的内表
cl_demo_output=>display( s_bukrs_auth[] ).
ENDFORM.
📎 补充
在实际开发中,公司会在项目初期设立公司自己规范的 ATC
检查,我们在开发时也要遵守 ATC
的规范进行开发
在这种情况下权限检查时是需要将所有字段标明,否则 ATC
检查会提示要求注明所有权限字段
不需要判断的权限字段可以使用 DUMMY
关键字跳过权限检查
" 权限校验
AUTHORITY-CHECK OBJECT 'C_ROUT'
ID 'WERKS' FIELD gs_data-werks
ID 'ACTVT' DUMMY
ID 'PLNTY' DUMMY
ID 'STATU' DUMMY
ID 'VERWE' DUMMY.
IF sy-subrc NE 0.
MESSAGE s012(zpp001) WITH gs_data-werks DISPLAY LIKE 'E'. " 工厂无此权限
LEAVE LIST-PROCESSING.
ENDIF.