繁体   English   中英

SAP ABAP CDS 查看/DCL 检查授权

[英]SAP ABAP CDS View / DCL check authorization

我有一个 CDS 视图并想应用授权检查。

CDS 查看ZCDS_VIEW

@AbapCatalog.sqlViewName: 'ZCDS_VIEW'
@VDM.viewType: #BASIC
@AccessControl.authorizationCheck: #CHECK
define view ZCDS_VIEW
  as select distinct from vbak
    inner join            vbap              on vbap.vbeln = vbak.vbeln // At least 1 item
    [...]
{
  key vbak.vbeln,
      vbak.ktext,       
      [...]
}
where
    [...].

我担心的是,控制授权的方法需要在不同的表中进行检查,而不仅仅是对 CDS 视图中的字段进行授权检查。 确实,我必须:

  1. 检查特定表 ZT1 的利润中心的权限
  2. 将 ZT1 表的条目与 ZT2 表连接起来,这给了我授权的部门
  3. 使用授权部门过滤我的 CDS 视图的结果。

为此,我是这样做的:

创建 CDS ZCDS_AUTH_PLANT

@AbapCatalog.sqlViewName: 'ZCDS_AUTH_PLANT'
@VDM.viewType: #BASIC
@AccessControl.authorizationCheck: #CHECK
define view ZCDS_AUTH_PLANT
  as select distinct from zt1
    inner join            zt2 on zt2.bu = zt1.bu
{
  zt1.prctr  as profit_center,
  zt2.bukrs  as company_code,
  zT2.werks as plant_code
};

创建 DCL ZDCL_AUTH_PLANT

@MappingRole: true
define role ZDCL_AUTH_PLANT {
  grant
    select
      on
        ZCDS_AUTH_PLANT
          where
            ( profit_center ) = aspect pfcg_auth( XXX, PRCTR );
}

更新 CDS ZCDS_VIEW

ZCDSC4_AUTH_PLANTZCDSC4_AUTH_PLANT连接条件以具有授权的部门。

@AbapCatalog.sqlViewName: 'ZCDS_VIEW'
@VDM.viewType: #BASIC
@AccessControl.authorizationCheck: #CHECK
define view ZCDS_VIEW
  as select distinct from vbak
    inner join            ZCDSC4_AUTH_PLANT on ZCDSC4_AUTH_PLANT.plant_code = vbap.werks // At least 1 item matching division
    [...]
{
  key vbak.vbeln,
      vbak.ktext,       
      [...]
}
where
    [...].

我想知道:

  • 这是一个好习惯吗?
  • 您是否看到了更相关的替代方案?
  • 我们应该在 DCL 中做所有事情吗?

这是一个好习惯吗?

DCL 是对 ABAP CDS 视图实施授权检查的标准方法,所以是的,使用它是一种很好的做法。

这包含在此处的 CDS 实体访问控制和此处创建 DCL 源的官方文档中

您是否看到了更相关的替代方案?

使用 DCL 文件是否不能满足您的要求? 如果它正常工作,您已经在使用正确的方法来实施身份验证检查,因此不需要替代解决方案

我们应该在 DCL 中做所有事情吗?

如果一切都意味着完整的授权检查,那么是的。 您当然也可以在 DCL 中拥有更复杂的逻辑,而不仅仅是检查 PCFG 对象(例如 GDPR 限制),但它似乎不适用于您的场景

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM