安全规则
安全规则 是 CloudBase 云函数的 函数级权限控制 功能,通过简单的表达式精确控制哪些用户可以调用特定的云函数。
配置入口
在 云开发平台/云函数 点击「权限控制」按钮进入配置页面。
适用范围
安全规则仅对客户端 SDK 调用(callFunction)生效,不适用于以下场景:
- 管理端 API 调用
- HTTP 触发器
- 定时触发器
- 数据库触发器
基本语法
云函数安全规则配置在环境级别,环境内所有函数共享一个配置文件。配置采用 JSON 格式:
{
"函数名或通配符": {
"invoke": "表达式或布尔值"
}
}
配置结构说明
| 配置项 | 说明 | 示例 |
|---|---|---|
| 顶级 key | 函数名(具体函数)或 *(通配所有函数) | "*"、"getUserInfo" |
| 操作 key | 固定为 invoke,表示调用权限 | "invoke" |
| 规则值 | true、false 或 "auth != null" | 见下方支持的规则值说明 |
必读
- 安全规则顶级配置必须包含 key 为
*的通配配置 - 每个函数配置中必须包含
invoke操作配置 - 规则值仅支持
true、false或"auth != null",不支持其他表达式 - 默认情况下,建议配置为
"auth != null"(仅登录用户可调用)
匹配优先级
- 优先匹配具体的函数名配置
- 如果没有匹配到具体函数名,则使用
*通配配置
支持的规则值
云函数安全规则仅支持以下三种规则值,不支持其他复杂表达式(如 &&、||、属性访问等):
| 规则值 | 说明 | 适用场景 |
|---|---|---|
true | 允许所有用户调用(包括未登录用户) | 公开接口(获取公告、配置等) |
false | 禁止所有用户调用 | 已废弃的函数、仅内部调用的函数 |
"auth != null" | 仅登录用户可调用 | 需要用户身份验证的业务函数 |
不支持的表达式示例:
- ❌
"auth.uid != null"- 不支持属性访问 - ❌
"auth != null && auth.loginType == 'WECHAT'"- 不支持逻辑运算符 - ❌
"auth.openid != null || auth.uid != null"- 不支持复杂条件
如需更精细的权限控制,请在云函数内部实现业务逻辑验证。
常用模板
- 仅登录用户可调用
- 部分公开,部分限制
- 所有函数公开
- 所有函数禁止调用
{
"*": {
"invoke": "auth != null"
}
}
所有函数默认要求用户登录后才能调用,适用于需要身份验证的业务系统。
{
"*": {
"invoke": "auth != null"
},
"getAnnouncement": {
"invoke": true
},
"adminFunction": {
"invoke": false
}
}
- 默认要求登录
getAnnouncement公开访问adminFunction完全禁止客户端调用
{
"*": {
"invoke": true
}
}
⚠️ 警告:所有函数允许匿名调用,存在安全风险,仅适用于完全公开的接口。
{
"*": {
"invoke": false
}
}
所有函数禁止客户端调用,仅允许通过管理端 API、触发器等方式调用。
常见问题
可以针对不同用户设置不同权限吗?
安全规则仅支持 true、false 和 "auth != null" 三种规则值,不支持基于用户属性、登录方式、角色等的复杂权限控制。
如需更精细的权限控制(如基于角色、用户组、登录方式等),可以在云函数内部进行验证
如何排查权限错误?
当遇到 PERMISSION_DENIED 错误时,请按以下步骤排查:
- 检查安全规则配置:
- 前往 云开发平台/云函数 查看权限控制配置
- 确认用户登录状态:
- 使用客户端 SDK 检查用户是否已登录
- 对于需要
"auth != null"的函数,确保调用前已完成登录
- 查看错误详情:
- 详细错误信息请参考 PERMISSION_DENIED 错误码
- 检查是否是调用方式问题(如使用了 HTTP 触发器而非 SDK
callFunction)