🌠 SAP 权限分配 & 审核

首页 / 🐽 SAP / 正文

🎯 前言

  1. 🍉 SU21 创建 权限类,权限对象,分配权限字段
  2. 🌵 PFCG 创建 权限角色,分配权限对象,维护权限对象值
  3. 🍒 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.
您阅读这篇文章共花了:
打赏
评论区
头像
文章目录