
# 如何控制接口访问权限
#### 什么是业务权限凭证
业务权限凭证用于控制接口的访问权限。AstroZero提供了两种方式对API接口访问权限的控制：配置自定义接口前置脚本和配置API接口的业务权限凭证。优先通过自定义接口前置脚本进行权限验证，根据脚本的返回值判断下一步的操作。
对于配置了业务权限凭证的接口，需要在权限的"业务权限凭证"页签中接入相应的业务权限凭证，才可调用API接口。若平台用户没有配置业务权限凭证，则继续校验Profile权限中的数据权限（例如执行服务编排、执行脚本、对象的增删改查、API读、API写权限）。若业务用户没有配置业务权限凭证，调用接口直接报错，不会继续校验Profile权限中的数据权限。
对于未配置了业务权限凭证的接口，则需要查看内置系统参数"bingo.permission.customapi.check"取值，该参数控制公共接口未绑定业务权限凭证时的逻辑。
- 若该参数取值为"是"，公共接口未绑定业务权限凭证时，业务用户无法访问该接口；对于平台用户，则继续校验Profile权限中的数据权限。
- 若该参数取值为"否"，公共接口未绑定业务权限凭证时，业务用户可直接访问该接口，无需鉴权；对于平台用户，则继续校验Profile权限中的数据权限。
例如：运行环境或者沙箱环境中，该内置参数配置为"是"，接口未绑定业务权限凭证，即使在权限设置中勾选"API读"与"API写"权限，业务用户也无法操作对象数据；若业务用户需要操作对象数据，请将该内置参数配置为"否"。
查看和配置该系统参数的方法为：在AstroZero经典版环境管理中心选择"系统管理 \> 系统参数"，在"内置系统参数"页签查看和配置该参数。
图1内置系统参数   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960286733.png "点击放大")
#### 如何配置业务权限凭证
1. 参考[登录经典应用设计器](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_5025.html)中操作，登录经典版应用设计器。
2. 在页面左下方，单击"配置"。 
   图2选择配置   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960286413.png)
   
   
3. 在"业务权限凭证"页签，单击"新建"，新建业务权限凭证。 
   图3新建业务权限凭证   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960286749.png "点击放大")
   
   
4. 查看需要配置业务权限凭证的API接口，单击业务权限凭证的"编辑"，将相应的权限凭证添加到右侧选择框中，单击"保存"。 
   图4API接口绑定业务权限凭证   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960286729.png "点击放大")
   
   
5. 在经典版开发环境首页，单击"管理"，进入管理中心。 
   图5选择管理   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933047628.png "点击放大")
   
   
6. 在左侧导航栏中，选择"用户管理 \> 权限配置"。 
   在权限列表中查看需要配置业务权限凭证的权限详情，在"业务权限凭证"页签，将相应的业务权限凭证进行编辑，勾选"可接入"选项。
   图6权限绑定业务权限凭证   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960286741.png "点击放大")
   
   
7. 选择"用户管理 \> 用户"或"用户管理 \> 业务用户"，对平台用户或业务用户配置相应的权限，该用户即可获取调用相应API接口的权限，否则将无法通过API接口的业务权限凭证校验。 
   ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
   AstroZero对用户和业务用户在业务权限凭证校验的处理有所不同。平台用户在业务权限凭证校验失败后会进行下一步的权限校验，如果后续校验通过仍可以调通API接口，业务用户则在业务权限凭证校验失败时直接报错，终止操作。
   
   
 
#### 如何通过脚本控制接口访问权限
1. AstroZero提供了示例自定义接口前置脚本，可以仿造示例代码进行脚本的编写。 
   图7创建示例自定义接口前置脚本   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960286737.png "点击放大")
   您可以在自定义接口前置脚本中进行自定义的权限校验，并根据校验结果返回相应的result值。
   ```
   export class Output {
       @action.param({ type: "Number"})
       result: decimal.Decimal;
   }
    
   const PASS     = decimal.newWithExponent(1, 0);
   const BANNED   = decimal.newWithExponent(0, 0);
   const FALLBACK = decimal.newWithExponent(-1, 0);
   ```
   ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
   自定义接口前置脚本输出参数result含义如下：
   - PASS--{"result":1}：校验通过，直接放行。
   
   - BANNED--{"result":0}：校验不通过，无法调用。
   
   - FALLBACK--{"result":-1}：校验通过，但还需要进行后续权限校验。
    
   开发自定义接口前置脚本时，出参可按照示例自定义接口前置脚本代码中的表达式也可自行定义，但必须确保出参为"-1"、"0"和"1"中的某一值，否则作为校验不通过处理。
   
   
2. 单击左下角的"服务"，在服务管理页面，单击"编辑"，将校验方式改为"与脚本绑定"，在"前置处理"中选择相应的自定义接口前置脚本。 
   - 前置处理：一般是授权处理脚本，在访问自定义接口前，需要进行授权处理。
   
   - 后置处理：一般是敏感错误信息或者统计日志处理脚本，后置脚本没有返回参数，无论执行成功或失败都不影响自定义接口的请求处理流程。
   
   
   图8自定义访问控制   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960286725.png "点击放大")
   图9绑定自定义接口前置脚本   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933047604.png "点击放大")
   
   
 
