参数访问控制插件配置参考。
功能说明
param-access-control插件实现了基于请求参数和上下文条件进行精确访问控制,可用于实现复杂的请求验证和访问管理场景。
运行属性
- 插件执行阶段:鉴权阶段。 
- 插件执行优先级:310。 
配置字段
| 参数 | 数据类型 | 填写要求 | 默认值 | 描述 | 
| parameters | object | 必填 | - | 定义需要使用的参数,支持从Header、Query、Path中提取。 | 
| rules | array of rule | 必填 | - | 定义判断规则和处理逻辑。 | 
parameters字段配置说明
| 参数 | 格式 | 描述 | 
| Header | 
 | 从请求头提取参数。 | 
| Query | 
 | 从查询参数提取参数。 | 
| Path | 
 | 从路径中提取第n段内容,序号从1开始。 | 
| Path | 
 | 获取完整路径。 | 
rules字段配置说明
| 参数 | 数据类型 | 填写要求 | 默认值 | 描述 | 
| name | string | 必填 | - | 规则名称。 | 
| condition | string | 必填 | - | 判断条件。 | 
| ifTrue | string | 选填 | - | 条件为真时的处理指令(ALLOW/DENY)。 | 
| ifFalse | string | 选填 | - | 条件为假时的处理指令(ALLOW/DENY)。 | 
| statusCode | number | 选填 | 403 | DENY时返回的HTTP状态码。 | 
| responseHeaders | object | 选填 | - | DENY时返回的响应头。 | 
| responseBody | string | 选填 | - | DENY时返回的响应体。 | 
支持的运算符和函数
| 运算符/函数 | 描述 | 示例 | 
| == | 等于 | 
 | 
| != | 不等于 | 
 | 
| > | 大于 | 
 | 
| >= | 大于等于 | 
 | 
| < | 小于 | 
 | 
| <= | 小于等于 | 
 | 
| contains | 包含子串 | 
 | 
| matches | 正则匹配 | 
 | 
| startsWith | 前缀匹配 | 
 | 
| endsWith | 后缀匹配 | 
 | 
| && | 逻辑与 | 
 | 
| || | 逻辑或 | 
 | 
| ! | 逻辑非 | 
 | 
配置示例
插件通过配置规则(rules)来控制请求访问,规则按照配置顺序依次执行直到遇到ALLOW或DENY指令。每个规则必须至少配置ifTrue或ifFalse其中之一,建议为DENY操作设置明确的状态码和响应信息。以下示例展示了常见的使用场景:
基于用户身份的访问控制
parameters:
  userType: "Header:userType"
  userId: "Path:1"
rules:
  - name: admin-access
    condition: "userType == 'admin'"
    ifTrue: "ALLOW"
  - name: user-access
    condition: "userId == '123'"
    ifFalse: "DENY"
    statusCode: 403
    responseBody: "Access Denied"根据该配置,满足以下条件的请求将被允许:
# 管理员访问任意路径
curl http://example.com/any/path? -H "userType: admin"
# 用户访问自己的资源
curl http://example.com/123/profile而以下请求将被拒绝:
# 用户访问他人资源
curl http://example.com/456/profile基于API版本的访问控制
parameters:
  apiVersion: "Header:Api-Version"
  path: "Path"
rules:
  - name: version-check
    condition: "path.contains('/v2/') && apiVersion < '2.0'"
    ifTrue: "DENY"
    statusCode: 400
    responseHeaders:
      Content-Type: application/json
    responseBody: '{"error": "Please upgrade to API version 2.0 or above"}'