我在对象上使用优先级来检查用户的权限。但是我遇到了奇怪的行为 - 当我尝试在数据库安全规则(实时数据库)中将优先级与大于或等于运算符(> =)进行比较时,我得到权限被拒绝错误。但是,当我使用相等运算符(===)时,它工作正常。我需要使用> =运算符,因为我正在检查给定操作的最小权限值。
这是具体的例子:
{
"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中生效之间有一些延迟吗?
感谢您的帮助。