使用@requires注解不需要提前导入:输入命令行cdswatch,可以自动扫描和监控文件内容变化。cds等格式:使用annotate+实体名+with+注解实现权限控制:如果注解中出现typo,编译时不会报错:annotateBrowseBooksServicewith@(requires:'authenticated-user');注释ShopService.Books@(requires:['Vendor','ProcurementManager']);用@(requires:'system-user')注释ShopService.ReplicationAction;在此示例中,BrowseBooksService服务向经过身份验证的用户开放,但不向匿名用户开放。具有Vendor或ProcurementManager角色的用户可以访问ShopService.Books实体。未绑定操作ShopService.ReplicationAction只能由技术用户触发。通过@requires限制服务访问时,服务的元数据端点(即/$metadata和服务根目录/)默认也受到限制。如果需要公共元数据,可以分别通过配置cds.env.odata.protectMetadata=false(Node.js)或cds.security.openMetadataEndpoints=true(Java)禁用检查。举个具体的例子,A??dminService只能被用户admin访问:在api路径下,只有admin用户可以访问/api/admin:运行时的基本授权字段:使用ctrl+shift+n打开隐身窗口,即可以防止Chrome自动附加凭据的问题。看到下图中的Signin按钮,说明权限控制已经生效:cds模型中的Authorization信息会被写入到xs-security.json文件中。使用以下命令行自动生成:cdscompileservice.cds--toxsuaa>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高级管理员使用SAPHANAXS高级管理工具从角色模板创建角色时),确保在xsappname中定义的名称很重要。scopes:在应用程序安全文件(xs-security.json)中,scopes属性定义了一组适用于应用程序的一个或多个安全范围。可以定义多个范围;每个范围都有一个名称和一个简短的描述。xs-security.json文件中定义的范围列表用于授权XS应用程序的OAuth客户端使用正确的本地和外部范围集;即应用程序需要能够响应所有请求的权限。范围主要是“本地的”;也就是说,特定于应用程序。本地范围由应用程序自己的应用程序路由器检查,或在应用程序的运行时容器内以编程方式检查。如果应用程序需要代表当前用户访问其他SAPHANAXS服务,则提供的访问令牌需要包含必要的“外部”范围。应用程序本身不提供外部范围;它们由应用程序上下文之外的其他来源检查。在xs-security.json文件中,“本地”范围必须以变量<$XSAPPNAME>为前缀;在运行时,这个变量被替换为相应的本地应用程序名称。另一方面,“外部”范围必须以“外部”应用程序本身的名称为前缀。xsappname的名称定义在yaml文件中,例如mta.
