CDS中的授权(权限)规则

了解基于数据库的访问控制,

Authorization Rules In CDS,及Access Conditions in DCL Sources。

该图显示了CDS访问控制的基本原理。一个新的存储库对象DCL源(或CDS访问控制)定义了CDS角色(关键字DEFINE ROLE…)。它将CDS角色与一个(或多个)CDS视图(关键字GRANT SELECT ON…)相关联,并定义此CDS视图的访问条件(关键字WHERE…)。每当ABAP程序访问此CDS视图时,数据库界面都会根据访问条件自动过滤选择结果。

CDS中的授权(权限)规则 - 第1张  | 优通SAP
基于数据库的访问控制

注意: CDS访问控制仅在程序直接访问CDS视图时有效。如果通过另一个CDS视图间接访问CDS视图,则将忽略访问控制。

1.创建一个新的DCL源

1.现有软件包的名称右键,输入新DCL源的名称和描述

CDS中的授权(权限)规则 - 第2张  | 优通SAP

如果您的软件包已经包含DCL源,则可以使用以下快捷方式:

  • 在项目资源管理器中,展开收藏包的子节点Core Data Services。
  • 右键单击“访问控制”,然后选择“新建数据定义”。

2.CDS DCL语法

CDS中的授权(权限)规则 - 第3张  | 优通SAP
BAP CDS DCL语法

3.命名规则和建议

3.1.DCL源名称:

  • 最多30个字符
  • 在整个系统中都是唯一的
  • 总是大写

3.2.CDS角色名称:

  • 最多30个字符
  • 在整个系统中都是唯一的
  • 不区分大小写
  • 可以与DCL源名称不同(不建议)

4.DCL源中的访问条件

CDS中的授权(权限)规则 - 第4张  | 优通SAP

DCL中的条件类型

存在以下在DCL中定义条件的方式

文字条件

  • 将CDS视图的一个字段与文字值进行比较。

PFCG条件

  • 使用CDS视图的一个或多个字段在当前用户的主记录中查找授权。
  • 一个PFCG条件始终基于一个授权对象。
  • 左侧的视图字段分配给右侧的授权对象的字段。
CDS中的授权(权限)规则 - 第5张  | 优通SAP

PFCG条件示例

上例中的CDS角色包含两个PFCG条件。

第一个条件基于授权对象S_CARRID。在ABAP中,相应的AUTHORITY-CHECK语句如下所示

第二个条件基于权限对象S_ COUNTER。该授权对象具有三个授权字段:CARRID,COUNTNUM和ACTVT。相应的AUTHORITY-CHECK语句如下所示:

5.与授权相关的注释

DCL源中的注释

@ EndUserText.label:

  • 角色的可翻译简短文本(与DDL Sources中相同)

@MappingRole

  • 值为true:角色隐式分配给所有用户
  • 值false:ABAP CDS当前不支持

6.DDL源中权限相关的注释

@ AccessControl.authorization

#CHECK:执行授权检查。如果未分配角色,则发出语法警告。

#NOT_REQUIRED:与#CHECK类似,但禁止显示语法警告

#NOT_ALLOWED:无授权检查。语法警告(如果已分配角色)