SAP ABAP CDS视图/ DCL检查授权



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

CDS ViewZCDS_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表连接起来,ZT2表给出了授权的分区
  3. 使用授权的分区筛选我的CDS视图的结果。

我是这样做的:

创建cdZCDS_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
};

Create DCLZDCL_AUTH_PLANT

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

更新CDSZCDS_VIEW

增加ZCDSC4_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限制)更复杂的逻辑,但它似乎不适用于您的场景

相关内容

  • 没有找到相关文章

最新更新