SAP CDS entity 中使用 @readonly 进行访问控制
Authorization 意味著通過向 CDS 模型添加相應的聲明來限制對數據的訪問,然后在服務實現中強制執行這些聲明。 通過添加此類聲明,我們實質上撤銷了所有默認訪問權限,然后授予個人權限。
本質上,authentication 負責驗證用戶的身份和提出的聲明,例如授予的角色和租戶成員資格,也就是說,揭示了誰使用該服務。 相反,authorization 控制認證后的用戶,如何根據授予的權限與應用程序的資源進行交互。 由于訪問控制需要依賴經過驗證的聲明,因此Authentication 是 Authorization 的先決條件。
從 CAP 的角度來看,authentication 方法是可自由配置的,通常使用底層平臺的中央身份和身份驗證服務。 針對本地開發場景,CAP 內置了基于 mock 用戶的認證。
Static User Claims
CDS 授權是模型驅動的。 這基本上意味著它將 CDS 模型元素的訪問規則綁定到用戶聲明。 例如,對服務或實體的訪問取決于用戶被分配的角色。 或者,甚至可以限制實例級別的訪問,例如,對創建實例的用戶進行訪問。
通用 CDS 授權建立在 CAP 用戶概念之上,CAP 用戶概念是由平臺的身份服務確定的具體用戶類型的抽象。 該設計決策使不同的身份驗證策略可插入通用 CDS 授權。
成功認證后,(CAP)用戶由以下屬性表示:
- 標識用戶的唯一(登錄)名稱。 未命名的用戶有一個固定的名稱,例如system或 anonymous。
- 多租戶應用程序的租戶。
- 管理員授予用戶的角色或由身份驗證級別派生的角色。
- 用戶已由管理員分配的屬性。
User Roles
作為訪問控制的基礎,您可以設計特定于應用程序的概念角色。 這樣的角色應該反映用戶如何與應用程序交互。 例如,供應商角色可以描述允許閱讀銷售文章和更新銷售數據的用戶。 相反,ProcurementManager 可以完全訪問銷售文章。 用戶可以擁有多個角色,這些角色由平臺授權管理解決方案中的管理用戶分配。
Pseudo Roles
經常需要定義不是基于特定于應用程序的用戶角色,而是基于請求的身份驗證級別的訪問規則。 例如,一項服務不僅可以被識別的用戶訪問,而且還可以被匿名(例如,未經身份驗證的)用戶訪問。 此類角色稱為偽角色,因為它們不是由用戶管理員分配的,而是在運行時自動添加的。
CAP 當前支持以下預定義的偽角色:
- authenticated-user 指的是(已命名或未命名的)已提交有效身份驗證聲明(例如登錄令牌)的用戶。
- system-user 表示用于技術交流的未命名用戶。
- any 是指所有用戶,包括匿名用戶(這意味著無需身份驗證的公共訪問)。
偽角色 system-user 允許將技術用戶的內部訪問與業務用戶的外部訪問分開。 技術用戶可以來自 SaaS 或 PaaS 租戶。 此類技術用戶請求通常以特權模式運行,對實例級別沒有任何限制。 例如,將數據復制到另一個系統的操作需要訪問訂閱的 SaaS 租戶的所有實體,并且不能暴露給任何業務用戶。 請注意,system-user 也意味著經過身份驗證的用戶。
默認情況下,CDS 服務沒有訪問控制。 因此,根據配置的身份驗證,CDS 服務最初對匿名用戶開放。 為了根據您的業務需求保護資源,您可以定義使運行時強制執行適當訪問控制的限制。 或者,您可以通過授權強制 API 添加自定義授權邏輯。
您可以通過在 CDS 模型中選擇適當的層次結構級別來影響限制的范圍。 例如,對 Service 級別的限制適用于服務中的所有實體。
使用 @readonly 或 @insertonly 注釋實體以靜態限制所有用戶允許的操作,如示例中所示:
entity my.bookshop.Addresses as projection on external.A_BusinessPartnerAddress {key AddressID as ID,key BusinessPartner as businessPartner,@readonly Country as country,@readonly CityName as city,@readonly PostalCode as postalCode,@readonly StreetName as street,@readonly HouseNumber as houseNumber,false as tombstone: Boolean }使用 @readonly 限制用戶對這些屬性進行操作:
總結
以上是生活随笔為你收集整理的SAP CDS entity 中使用 @readonly 进行访问控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对方不接电话怎么知道对方的位置(怎么知道
- 下一篇: SAP Spartacus 4.0 版本