电竞比分网-中国电竞赛事及体育赛事平台

分享

使用注解 @requires 給 SAP CAP CDS 模型添加權(quán)限控制

 汪子熙 2022-03-12

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

輸入命令行 cds watch,可以自動掃描并監(jiān)控 .cds 等格式的文件內(nèi)容變化:

使用 annotate + entity name + with + 注解實現(xiàn)權(quán)限控制:

如果注解出現(xiàn) typo,編譯不報錯:

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

在此示例中,BrowseBooksService 服務對經(jīng)過身份驗證的用戶開放,但對匿名用戶不開放。 具有 Vendor 或 ProcurementManager 角色的用戶可以訪問 ShopService.Books 實體。 未綁定操作 ShopService.ReplicationAction 只能由技術(shù)用戶觸發(fā)。

當通過 @requires 限制服務訪問時,服務的元數(shù)據(jù)端點(即 /$metadata 以及服務根 /)默認也受到限制。 如果需要公共元數(shù)據(jù),可以分別通過 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 按鈕,說明權(quán)限控制生效了:

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 官網(wǎng)可以查到。

  • xsappname:xsappname 屬性表示系統(tǒng)生成的 OAuth 客戶端 ID 的開發(fā)人員定義部分。 由于 OAuth 客戶端 ID 在給定子帳戶(pka“身份區(qū)域”)中必須是唯一的,因此必須以保證相應 OAuth 客戶端 ID 的唯一性的方式定義 xsappname 屬性。在配置其他安全組件時(例如,當 XS 高級管理員使用 SAP HANA XS 高級管理工具從角色模板創(chuàng)建角色時),確保在 xsappname 中定義的名稱很重要。

  • scopes:在應用程序安全文件 (xs-security.json) 中,scopes 屬性定義了一組適用于應用程序的一個或多個安全范圍。 可以定義多個范圍; 每個作用域都有一個名稱和一個簡短的描述。 xs-security.json 文件中定義的范圍列表用于授權(quán) XS 應用程序的 OAuth 客戶端使用正確的本地和外部范圍集; 也就是說,應用程序需要能夠響應所有請求的權(quán)限。

范圍大多是“本地的”; 也就是說,特定于應用程序。 本地范圍由應用程序自己的應用程序路由器檢查或在應用程序的運行時容器內(nèi)以編程方式檢查。 如果應用程序需要代表當前用戶訪問其他 SAP HANA XS 服務,則提供的訪問令牌需要包含必要的“外部”范圍。 應用程序本身不提供外部范圍; 它們由應用程序上下文之外的其他來源檢查。

在 xs-security.json 文件中,“本地”范圍必須以變量 <$XSAPPNAME> 為前綴; 在運行時,該變量被替換為相應的本地應用程序名稱。 另一方面,“外部”作用域必須以“外部”應用程序本身的名稱作為前綴。

xsappname 的名稱在 mta 等 yaml 文件里定義。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章