无法使用`> =`运算符来比较firebase数据库安全规则中的getPriority()值

时间:2018-06-16 16:23:14

标签: firebase firebase-realtime-database firebase-security firebase-security-rules

我在对象上使用优先级来检查用户的权限。但是我遇到了奇怪的行为 - 当我尝试在数据库安全规则(实时数据库)中将优先级与大于或等于运算符(> =)进行比较时,我得到权限被拒绝错误。但是,当我使用相等运算符(===)时,它工作正常。我需要使用> =运算符,因为我正在检查给定操作的最小权限值。

这是具体的例子:

{
  "rules": {
    "tiles": {
      "$boardId": {
        ".read": "root.child('boards/'+$boardId+'/owner').val() === auth.uid || root.child('boards/'+$boardId+'/visibility').val() === 'public' || root.child('boardsPermissions/' + $boardId + '/' + auth.uid).getPriority() >= 10",
        ".write": "root.child('boards/'+$boardId+'/owner').val() === auth.uid || root.child('boardsPermissions/' + $boardId + '/' + auth.uid).getPriority() >= 20"

      }
    }
  }
}

如果尝试使用用户tiles/board-1/tile-1向位置user-1写入权限节点中的此数据库记录:

'permissions/board-1/user-1': {
    .priority: 20
 }

我收到错误,但如果我将写规则更改为下面的表单,我可以写入给定的节点。

".write": "root.child('permissions/' + $boardId + '/' + auth.uid).getPriority() === 20"

我知道第一个条件是假的(用户不是磁贴的所有者)。我相信这可能是一个错误,但我想先确认一下。有人可以看看吗?

同样奇怪的是,它开始工作一次,我成功写入数据库,但它再次停止工作。发布安全规则与它们在DB中生效之间有一些延迟吗?

感谢您的帮助。

0 个答案:

没有答案