存储权限

云存储支持通过安全规则控制前端访问云存储的权限,需特别注意:

  1. 安全规则仅对前端(小程序端)访问生效,微信云托管控制台始终拥有所有读写权限。
  2. 这里的限制是接口层面的,不是控制通过云存储获取的文件 HTTP URL 的访问权限。

以下是一个对小程序端 ”所有用户可读、仅文件创建者可写“ 的安全规则示例:

{
  "read": true,
  "write": "resource.openid == auth.uid"
}

概览

存储安全规则用于确定哪些人对云存储桶中存储的文件拥有读取和写入权限,也可用于文件中包含的元数据校验。规则通过 json 来描述,允许在满足条件时允许 readwrite 操作,示例配置如下:

{
  "read": boolean | condition expression string,
}

json 配置的 key,是用户的操作类型value 是一个表达式。当表达式执行结果的值是 true 的时候,用户的操作允许执行;否则,用户的操作则不被允许。

操作类型 说明 默认值
read 读取文件,例如:download false
write 上传/覆盖文件,删除文件 false

规则验证所依据的上下文通过 authresource 对象获得,其提供可验证身份的上下文信息(auth.uid)和对象所有权(resource.openid)等信息。

{
  "read": "auth.uid == resource.openid",
  "write": "auth != null"
}

示例规则

注意:发布之前,请务必评估你的规则,确保它们可以为你的应用提供所需的最高级别的安全性。如果发布应用时设置的是 public 规则,可能会导致你存储的数据遭到意外访问或未经授权的访问。若设置的是 default 规则,可能导致你的数据无法被管理员外的用户访问。

存储安全规则以存储桶为控制边界,默认规则下不允许任何非管理端的资源访问,未实现基础的权限控制,可以根据需求设置如下的安全规则:

所有用户可读,仅所有者写

{
  "read": true,
  "write": "resource.openid == auth.openid"
}

仅所有者可读写

{
  "read": "resource.openid == auth.openid"
  "write": "resource.openid == auth.openid"
}

所有用户可读,仅所有者可写

{
  "read": true,
  "write": false
}

仅所有者可读写

{
  "read": false,
  "write": false
}

规则说明

云存储安全规则用于确定哪些人对存储桶中文件拥有读写权限,也可以用于验证文件元数据。规则基于 json 结构,key为操作类型,valueboolean 或 表达式字符串,当 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 在用户登录后,提供 openid。如果用户未登录,则为 null。
Auth
字段名 类型 说明
openid string 用户 openid,仅在已登录方式下存在值

资源校验

对规则进行校验是,可能还需要对正在上传/下载/修改或删除的文件元数据进行校验,这样可以创建功能强大的复杂规则来执行任务,例如允许上传包含特顶内容类型的文件。

存储安全规则通过 resource 对象提供文件元数据,可以在 readwrite 时校验这些属性,确保正确的访问。

Resource

属性 类型 说明
openid string 文件私有归属标识,标记所有者 id