用途:在 SAP CAP(Cloud Application Programming Model)项目中实现身份认证与授权,依据官方安全与授权指南整理最佳实践。
主要能力:服务级访问控制可用 @requires 限制整个服务(如 'authenticated-user' 或角色数组,多角色为 OR 逻辑)。实体级用 @restrict 细粒度声明 CRUD:grant 指定操作、to 指定角色、where 指定条件,实现实例级行级安全(如 createdBy = $user、costCenter = $user.attr.costCenter)。常见错误:误用 operations/roles/where 数组等字段,正确写法为 grant/to/where。
使用方式:在处理器中做程序化检查,如 user.is('admin') 判断角色,user.id、user.tenant、user.attr.costCenter、user.locale 获取身份信息;可在 before('UPDATE') 中自写 checkOwner 并用 req.reject(403) 拒绝。用 xs-security.json 定义 scopes 与 role-templates(含 attribute-references 暴露 XSUAA/IAS 属性)。本地开发在 .cdsrc.json 或 package.json 配置 mocked 用户与角色,以 --user alice 方式测试。IAS 场景将 auth 设为 ias,并在 mta.yaml 绑定身份服务实例。
适用场景:SAP BTP 上 CAP 服务的认证、角色访问控制、多租户与基于用户属性的数据过滤。
限制与注意:不要用 @requires:'any' 代替 'authenticated-user';不可只依赖客户端校验;where 中应使用 $user 而非硬编码用户 ID;角色必须配 scopes;@restrict 不会自动继承服务的 @requires。具体平台与计价信息暂未提供。