保护文件
云存储提供基于桶的声明式安全模型,称为云存储安全规则,可让开发者快速轻松地保护自己的文件。
了解规则
云存储安全规则用于确定哪些人对存储桶中文件拥有读写权限,也可以用于验证文件元数据。规则基于 json
结构,key
为操作类型,value
为 boolean
或 表达式字符串,当 boolean
或 表达式计算结果为 true
是则表示通过允许访问,否则拒绝访问。例如:
// 默认情况下,read / write 都为 false,拒绝来自客户端的访问。
{
}
// action value 可以为 true / false 值,代表 允许/拒绝 访问。
{
"read": true,
"write": false
}
// action value 可以为自定义表达式,表达式的计算值决定 允许/拒绝 访问。
{
"read": "auth != null",
"write": "auth == null || auth.uid == resource.openid"
}
匹配
存储安全规则对应存储桶,对存储桶中所有文件的访问生效。
请求校验
上传、下载、删除操作使用请求携带的 auth
身份校验状态进行求值。
请求变量
变量名 | 类型 | 说明 |
---|---|---|
auth | Auth | 在用户登录后,提供 uid(用户的唯一 ID)和 loginType(登录类型)。如果用户未登录,则为 null。 |
Auth
字段名 | 类型 | 说明 |
---|---|---|
loginType | string | 登录方式 公众平台登录,开放平台登录,自定义登录,匿名登录等等 |
uid | string | 用户唯一 id,微信小程序的请求没有此值 |
openid | string | 用户 openid,仅在微信登录方式下存在值 |
LoginType 枚举
枚举值 | 登录方式说明 |
---|---|
WECHAT_PUBLIC | 微信公众号 |
WECHAT_OPEN | 微信开放平台 |
ANONYMOUS | 匿名登录 |
邮箱登录 | |
CUSTOM | 自定义登录 |
资源校验
对规则进行校验是,可能还需要对正在上传/下载/修改或删除的文件元数据进行校验,这样可以创建功能强大的复杂规则来执行任务,例如允许上传包含特顶内容类型的文件。
存储安全规则通过 resource
对象提供文件元数据,可以在 read
,write
时校验这些属性,确保正确的访问。
Resource
属性 | 类型 | 说明 |
---|---|---|
openid | string | 文件私有归属标识,标记所有者 id |
path | string | 文件在云存储中的相对路径,路径不包含桶名 格式为 path/image.jpg,路径起始不包含 ./、/、. 等路径符 |
正则匹配
存储安全规则支持特殊的语法,在规则中可以通过字面量的方式引入正则对象(eg. /^reg\$/),并通过在正则对象上调用 test
方法校验参数是否匹配正则。
注意
- 在规则表达式中判断
test
结果时需要显式地与true
或false
比较,例如read: "/^public/.test('public') == true"
,而不是直接写表达式read: "/^public/.test('public')"
。 - 由于安全规则表达式承载于字符串,因此正则对象中如果涉及到需要转移的字符,需要多重转义,例如:如果需要匹配字符串
test/image
, 正则对象可以为/^test\/image/
,那么配置在规则表达式中应该为"/^test\\/image/.test("test/image")"
。
test
static
test(string) returns boolean 对象 true / false
在正则对象上调用,校验传入字符串 与正则对象是否匹配,返回 boolean 值
paramter
Parameter | Type | Description |
---|---|---|
string | string | 非空,任意字符串 |
完整示例
综上,您可以为图片存储解决方案创建完整的示例规则:
// public 目录下的文件为公有写权限,其他文件为私有写权限
{
"read": true,
"write": "/^public/.test(resource.path) || resource.openid == auth.uid"
}