使用注解 @requires 给 SAP CAP CDS 模型添加权限控制

简介: 使用注解 @requires 给 SAP CAP CDS 模型添加权限控制

使用 @requires 注解不需要提前导入:

输入命令行 cds watch,可以自动扫描并监控 .cds 等格式的文件内容变化:


使用 annotate + entity name + with + 注解实现权限控制

如果注解出现 typo,编译不报错:

annotate BrowseBooksService with @(requires: 'authenticated-user');
annotate ShopService.Books with @(requires: ['Vendor', 'ProcurementManager']);
annotate ShopService.ReplicationAction with @(requires: 'system-user');

在此示例中,BrowseBooksService 服务对经过身份验证的用户开放,但对匿名用户不开放。 具有 Vendor 或 ProcurementManager 角色的用户可以访问 ShopService.Books 实体。 未绑定操作 ShopService.ReplicationAction 只能由技术用户触发。


当通过 @requires 限制服务访问时,服务的元数据端点(即 /$metadata 以及服务根 /)默认也受到限制。 如果需要公共元数据,可以分别通过 config cds.env.odata.protectMetadata = false (Node.js) 或 cds.security.openMetadataEndpoints = true (Java) 禁用检查。


看个具体的例子,AdminService 只有用户 admin 才能访问:

在 api path 下,只有 admin 用户才能访问 /api/admin:


运行时的 basic Authorization 字段:

使用 ctrl+shift+n 打开隐身窗口,可以避免 Chrome 自动附带 credentials 的问题。

看到下图的 Sign in 按钮,说明权限控制生效了:


cds 模型里的 Authorization 信息,会写入 xs-security.json 文件。

使用如下命令行自动生成:

cds compile service.cds --to xsuaa > xs-security.json.

一个例子文件:

{
  "xsappname": "bookshop", "tenant-mode": "dedicated",
  "scopes": [
    { "name": "$XSAPPNAME.admin", "description": "admin" }
  ],
  "attributes": [
    { "name": "level", "description": "level", "valueType": "s" }
  ],
  "role-templates": [
    { "name": "admin", "scope-references": [ "$XSAPPNAME.admin" ], "description": "generated" }
  ]
}

这个文件的语法在 SAP 官网可以查到。

xsappname:xsappname 属性表示系统生成的 OAuth 客户端 ID 的开发人员定义部分。 由于 OAuth 客户端 ID 在给定子帐户(pka“身份区域”)中必须是唯一的,因此必须以保证相应 OAuth 客户端 ID 的唯一性的方式定义 xsappname 属性。在配置其他安全组件时(例如,当 XS 高级管理员使用 SAP HANA XS 高级管理工具从角色模板创建角色时),确保在 xsappname 中定义的名称很重要。


scopes:在应用程序安全文件 (xs-security.json) 中,scopes 属性定义了一组适用于应用程序的一个或多个安全范围。 可以定义多个范围; 每个作用域都有一个名称和一个简短的描述。 xs-security.json 文件中定义的范围列表用于授权 XS 应用程序的 OAuth 客户端使用正确的本地和外部范围集; 也就是说,应用程序需要能够响应所有请求的权限。


范围大多是“本地的”; 也就是说,特定于应用程序。 本地范围由应用程序自己的应用程序路由器检查或在应用程序的运行时容器内以编程方式检查。 如果应用程序需要代表当前用户访问其他 SAP HANA XS 服务,则提供的访问令牌需要包含必要的“外部”范围。 应用程序本身不提供外部范围; 它们由应用程序上下文之外的其他来源检查。


在 xs-security.json 文件中,“本地”范围必须以变量 <$XSAPPNAME> 为前缀; 在运行时,该变量被替换为相应的本地应用程序名称。 另一方面,“外部”作用域必须以“外部”应用程序本身的名称作为前缀。

xsappname 的名称在 mta 等 yaml 文件里定义。

相关文章
|
5月前
|
SQL Android开发
创建 SAP ABAP CDS View 保存失败 - Dependencies DDL source - View Entity not written
创建 SAP ABAP CDS View 保存失败 - Dependencies DDL source - View Entity not written
创建 SAP ABAP CDS View 保存失败 - Dependencies DDL source - View Entity not written
|
5月前
|
数据库 存储 BI
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
|
5月前
|
数据库
SAP S/4HANA 系统的底层基石 - 通过实际的例子,介绍 CDS View 入门级的概念试读版
SAP S/4HANA 系统的底层基石 - 通过实际的例子,介绍 CDS View 入门级的概念试读版
SAP S/4HANA 系统的底层基石 - 通过实际的例子,介绍 CDS View 入门级的概念试读版
|
5月前
|
数据库
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
|
5月前
|
数据库 SQL 应用服务中间件
SAP ABAP CDS View 和 HANA CDS View 相同点和不同点辨析
SAP ABAP CDS View 和 HANA CDS View 相同点和不同点辨析
SAP ABAP CDS View 和 HANA CDS View 相同点和不同点辨析
|
5月前
|
存储 对象存储 开发者
SAP CRM attachment 存储模型的技术属性详解
SAP CRM attachment 存储模型的技术属性详解
SAP CRM attachment 存储模型的技术属性详解
|
设计模式 SQL 数据建模
SAP Virtual Data Model 和 CDS View 的关联关系
SAP Virtual Data Model 和 CDS View 的关联关系
|
5月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
|
5月前
|
JavaScript 前端开发 开发者
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
|
5月前
|
Web App开发 数据采集 前端开发
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版