小程序Serverless提供了一套简明易懂的JSON语法用来控制用户对资源的访问,类似于身份验证体系里的IAM或者网络权限中的ACL。您可以在控制台上修改文件权限。

规则语法

一组权限规则由多个子规则组成,每个子规则包含以下信息:

  • 范围:用于定义规则生效范围。

    在数据存储的安全规则中,每一个规则的范围是一个文件(路径)。您可以通过文件路径指定一个特定的文件, 也可以通过JavaScript的正则表达式指代一批文件或使用星号(*)指代所有文件。以下是三种范围书写方式示例:

    • 文件路径: xxx/yyy/zzz.jpg 。范围是这个特定文件。
    • 正则表达式: /.*\\.png/。范围是所有后缀为.png 的文件。
    • 所有集合: * 指代所有集合。
  • 操作:用于定义生效范围内的特定操作。所有人都具有文件的读权限。

    文件存储提供以下操作定义规则:

    • .write :写操作
    • * :所有操作
  • 策略:用于确定生效范围内的特定操作是否允许。默认没有标记为允许的操作,都是不允许的。

    策略是操作是否被允许的标记,可以是一个布尔值,或者是一个表达式。当策略冲突时,以最先出现的规则策略为准。

    表 1. 表达式通用对象
    顶级对象 字段名称 描述
    request.auth userId 请求用户ID。
    resource.auth userId 资源所属用户ID。

    userId 指的是通过mpserverless.user.getInfo()获取的userId字段。

    表 2. 表达式运算符
    操作符 描述 匹配类型
    == 等于

    string

    number

    != 不等于

    string

    number

    > 大于 number
    >= 大于等于 number
    < 小于 number
    <= 小于等于 number
    !

    string

    number

默认规则

对于新创建的服务,小程序Serverless会自动提供一个默认规则。默认规则规定所有文件都只有资源所有者可以进行写操作,所有人可读。

{
  "file": {
    "*": {
      ".write": "request.auth.userId == resource.auth.userId"
    }
  }
}

规则示例

例如,您可以创建如下安全规则,满足不同的图片访问需求:

  • 对于.png格式的图片只有图片所有者可以写,所有人可读。
  • 某个特殊路径的图片只有所有者可以读写。
  • 其他文件所有人都可读写。
注意 JSON结构的安全规则配置暂不支持//注释 。为例方便阅读,在文档中使用//进行说明,在实际使用时请去掉//注释。
{
    "file": {
        "/.*\\.png/": {
            ".write": "request.auth.userId == resource.auth.userId", 
            "*": true
        }, 
        "xxx/yyy/zzz.jpg": {
            "*": "request.auth.userId == resource.auth.userId"
        }, 
        "*": {
            "*": true
        }
    }
}

其中:

  • 第一个规则是针对.png格式的图片文件。 /.*\\.png/是一个正则,匹配所.png图片作为规则范围。.read是具体操作描述,* 是全部其他操作的描述。规则内容为.png格式的图片只有资源所有者可以进行文件写操作,所有人可以进行读取操作。
  • 第二个规则是针对xxx/yyy/zzz.jpg这个特定路径的图片,只有资源所有者可以进行文件读写操作。
  • 第三个规则是针对除了前两个规则匹配到的文件之外的所有文件,所有人都可以进行读写操作。

修改文件权限

详细说明,请参见设置文件权限