abap - SAP ABAP CDS 查看/DCL 检查授权
问题描述
我有一个 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 视图中的字段进行授权检查。确实,我必须:
- 查看特定表 ZT1 利润中心的权限
- 将 ZT1 表的条目与 ZT2 表连接起来,这给了我授权的部门
- 使用授权部门过滤我的 CDS 视图的结果。
为此,我这样做了:
创建 CDSZCDS_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
};
创建 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 中做所有事情吗?
如果一切都意味着完整的授权检查,那么是的。当然,除了检查 PCFG 对象(例如 GDPR 限制)之外,您还可以在 DCL 中拥有更复杂的逻辑,但它似乎不适用于您的场景
推荐阅读
- javascript - 将 Sitecore 与 React JS 一起使用时图像 URL 不存在?
- python - find-s 算法的输出
- google-cloud-platform - 为什么授予“allAuthenticatedUsers”成员“Cloud Functions Invoker”角色不适用于谷歌云功能?
- powerbi - Powerbi oauth api 在从访问令牌访问数据时提供 403
- google-sheets - SAAS 应用程序的 Google 表格 API 限制
- java - 直接在Eclipse中运行源码就可以了。为什么 Jar 文件将停止运行并且控制台中没有异常显示?
- c# - 即使没有关注表单应用程序,也继续运行 ProcessCmdKey
- python-3.x - 猪拉丁函数代码列表中的值错误。当 x 明显在列表中时,删除(x)x 不在列表中
- .net - 如何将 XmlDocument 保存到“格式类似于 Visual Studio”的 .csproj 中,其中空元素保存在单独的行中?
- java - 给定一个数字数组,返回所有其他数字的乘积数组(带除法)