Firestore安全规则中!、&&、括号等表达式的含义是什么?
Firestore安全规则表达式答疑
问题1:&&、()运算符的作用
你给出的示例代码(已修正输入时的多余空格、错误字符I):
allow create: if request.resource.data.size() == 3 && (request.resource.data.status == "public" || request.resource.data.status == "private")
两个运算符的作用分别如下:
&&是逻辑与运算符,仅当运算符左右两侧的判断条件同时为真时,整个组合判断的结果才为真。在示例规则中,代表创建操作必须同时满足两个要求:请求携带的资源数据字段总数为3、资源的status字段值属于允许的枚举范围。()是优先级调整运算符,Firestore安全规则的运算符优先级和常规编程语言一致,逻辑或||的优先级低于逻辑与&&,如果不加括号,规则的实际判断逻辑会变成「(字段数为3且status为public)或者status为private」,只要status是private就算字段数不符合也会通过校验,不符合规则设计预期。添加括号后会优先计算括号内的逻辑或判断,再和前面的字段数条件做逻辑与校验,符合预期逻辑。
问题2:!运算符的含义
!是逻辑非运算符,作用是反转后续布尔表达式的结果:如果原表达式返回真,添加!后结果为假;如果原表达式返回假,添加!后结果为真。
示例用法:如果要限制创建资源时status不能为deleted,可以写为!(request.resource.data.status == "deleted"),和request.resource.data.status != "deleted"的校验效果完全一致。
内容的提问来源于stack exchange,提问作者Noobdeveloper
相关产品推荐
相关产品推荐

