# 安全规则

# 简介

安全规则是在基础权限控制基础上,更高级、灵活、可扩展的一种权限控制方式,可保护用户的云端数据。

基础权限控制是根据开发过程中最基础常见的情况预置的权限组,可以实现简单的权限管控,但随着应用业务场景越来越复杂,原有的管控方式无法支持类似根据角色、或者登录模式进行管控的需求。基础权限控制下实现类似需求需要将所有的客户端操作收归到云函数中,通过云函数中运行校验判断逻辑,实现访问控制,但在安全规则下,开发者可以自定义管控条件,通过规则语句完成权限配置,系统会根据规则完成访问控制,甚至可以进行数据校验。

安全规则利用基于 JSON 格式可扩展的配置语言定义用户可访问数据库与存储中的哪些数据开发者可根据应用所需的细化级别,编写简单或复杂的规则来保护应用中的数据。

# 优势特性

  1. 灵活。开发者可根据自己的业务特性自定义规则,规则支持根据应用数据本身来限制数据的可访问性。
  2. 细化粒度。规则可根据需求设置,或简单或复杂。
  3. 安全独立。规则在管理端进行设置,独立于应用业务逻辑之外,客户端不会获取规则,也无法绕过规则验证,保证对应用数据的访问都经过校验。
  4. 便捷。通过配置规则即可完成权限控制,免除接入层管控的开发与部署,可以快速验证。

# 工作方式

安全规则通过如下方式工作:在访问数据时,系统读取管理端设置的完整规则配置 JSON,其key为操作类型。系統根据操作类型获取配置值,值可能为 boolean 或 表达式字符串,表达式字符串为类 Javascript 语言的逻辑表达式。当 boolean 或 表达式计算结果为 true 时则表示通过允许访问,否则拒绝访问。只有允许访问时才会进行对应的后续操作。基础的规则配置格式如下:

{
    // 当配置值为 true 或 条件表达式计算值为 true 时允许对数据的访问。
    "read": false,
    "write": <<condition>>
}

其中表达式中可使用响应的内置变量获取请求的身份及元数据信息来进行复杂逻辑判断。详细可了解规则语言

# 计费

安全规则本身不收取任何费用,但规则中使用元数据变量(doc,resource)或获取函数(get)将对对应资源产生读取,消耗资源用量。

# 限制

  • 安全规则配置中每个表达式(组)最大长度限制为 1024 字符。
  • 表达式支持 变量(不支持正则)、数组表达式(数组成员限制为数字或字符串)、逻辑表达式(&&、||)、一元表达式(+1,-1,!a)、二元表达式( >、>=、<、<=、==、!=、in),成员表达式(a.b、a["b"])、调用表达式(仅云数据库安全规则支持),字符串模板表达式(用户云数据库函数调用动态参数,例:`database.collection.${doc.objectId}`)。