我有一个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视图中的字段进行授权检查。事实上,我必须:
为了做到这一点,我就这样做了:
创建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_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
[...].我想知道:
发布于 2021-10-22 08:44:47
这是个好做法吗?
DCL是为ABAP视图实现授权检查的标准方法,所以是的,使用它是一个很好的实践。
这包括在这里的正式文档CDS实体的访问控制和这里的创建DCL源
你看到更相关的替代方案了吗?
是否使用DCL文件无法满足您的要求?如果它有效,您已经使用了正确的方法来实现auth检查,因此不需要其他解决方案。
我们应该在DCL里做所有事情吗?
如果一切都意味着完整的授权检查,那么是的。当然,DCL中还有比检查PCFG对象更复杂的逻辑(例如GDPR限制),但它似乎不适用于您的场景。
https://stackoverflow.com/questions/69644528
复制相似问题