# 概览

存储安全规则用于确定哪些人对云存储桶中存储的文件拥有读取和写入权限,也可用于文件中包含的元数据校验。规则通过 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"
}

如需详细了解 Storage 安全规则,请参阅保障文件安全部分。

# 示例规则

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

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

# 所有用户可读,仅创建者及管理员可写

{
  "read": true,
  "write": "resource.openid == auth.openid", // 登录方式为微信
  "write": "resource.openid == auth.uid" // 登录方式为非微信
}

# 仅创建者及管理员可读写

{
  "read": "resource.openid == auth.openid", //登录方式为微信
  "read": "resource.openid == auth.uid", // 登录方式为非微信
  "write": "resource.openid == auth.openid", //登录方式为微信
  "write": "resource.openid == auth.uid" // 登录方式为非微信
}

# 所有用户可读,仅管理员可写

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

# 仅管理员可读写

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

在开发期间,您可以使用公开规则代替默认规则,将您的文件设置为可公开读写。这对于原型设计非常有用,但在上线前一定评估当前规则是否合适,否则可能带来越权的访问。

用户规则允许您向每个已经过身份验证的用户提供单独的个人文件存储。您也可以使用不公开规则来完全锁定您的文件,不过请注意,如果您使用此类规则,您的用户将无法在客户端读取或写入任何内容。通过服务端控制台访问文件的用户不会受到影响。

# 修改规则

云开发提供了一种简便的方式,你可以在云开发控制台,云存储模块的权限控制中查看和修改当前存储桶的权限管理。你可以选择由基础权限控制转为使用安全规则权限控制,修改更新安全规则,每次保存后规则会部署到存储服务器中,不过权限的更新可能不会立即完成,需要 1-3 分钟来生效。

你可以参阅保障文件安全,详细了解基于文件的安全机制的工作原理。也可以参阅用户安全性部分,了解基于用户的安全机制。