关于sap:使用注解-requires-给-SAP-CAP-CDS-模型添加权限控制

38次阅读

共计 1876 个字符,预计需要花费 5 分钟才能阅读完成。

应用 @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 文件里定义。

正文完
 0