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