如何使用 Firebase 安全规则只允许写入 1 个值
How to allow only 1 value to be allowed writing with Firebase security rules
我对 Firebase 安全规则感到非常困惑 - 关于文档中自上而下的工作。
所以我有这个规则:
"rules": {
"taskUsers": {
".read": "auth != null",
"$uid": {
".read": "auth != null",
".write": "auth != null && auth.uid == $uid",
},
},
}
因此所有用户数据只能由创建它们的用户更新 b/c of auth.uid == $uid。但是在 firebasepath/taskUsers/$uid 下,我有一个名为 notification 的值,我希望其他用户可以写入。就像在聊天通知系统中一样 - 当其他用户联系该用户时,"other users" 可以更改/写入值通知(如 +1)。但是用上面的规则,"other users"当他们post联系时,它会return权限被拒绝。所以如果我按照
这样的规则
"rules": {
"taskUsers": {
".read": "auth != null",
"$uid": {
".read": "auth != null",
".write": "auth != null && auth.uid == $uid",
"notification": {
".write": "auth != null",
},
},
},
}
规则被忽略了...那么我怎样才能创建一个规则,只允许登录的每个人写入 taskUsers/$uid 下的通知值?
我还没有测试过,但这至少应该为您指明正确的方向。他们的规则有点棘手......我仍然认为应该在 Firebase 前面有一个 WebService 来进行任何数据操作。否则如何实现重要的业务逻辑?
"rules": {
"taskUsers": {
".read": "auth != null",
"$uid": {
// authenticated users can write as long as they have a notification property
".write": "auth != null && (auth.uid == $uid || newData.hasChild('notification'))",
"notification": {
// Bonus rule: only increment the number by 1 or -1
".validate": "newData.isNumber() && ((!data.exists() && newData.val() === 1 || newData.val() === -1) || newData.val() === data.val()+1 || newData.val() === data.val()-1)",
}
},
},
}
我对 Firebase 安全规则感到非常困惑 - 关于文档中自上而下的工作。
所以我有这个规则:
"rules": {
"taskUsers": {
".read": "auth != null",
"$uid": {
".read": "auth != null",
".write": "auth != null && auth.uid == $uid",
},
},
}
因此所有用户数据只能由创建它们的用户更新 b/c of auth.uid == $uid。但是在 firebasepath/taskUsers/$uid 下,我有一个名为 notification 的值,我希望其他用户可以写入。就像在聊天通知系统中一样 - 当其他用户联系该用户时,"other users" 可以更改/写入值通知(如 +1)。但是用上面的规则,"other users"当他们post联系时,它会return权限被拒绝。所以如果我按照
这样的规则"rules": {
"taskUsers": {
".read": "auth != null",
"$uid": {
".read": "auth != null",
".write": "auth != null && auth.uid == $uid",
"notification": {
".write": "auth != null",
},
},
},
}
规则被忽略了...那么我怎样才能创建一个规则,只允许登录的每个人写入 taskUsers/$uid 下的通知值?
我还没有测试过,但这至少应该为您指明正确的方向。他们的规则有点棘手......我仍然认为应该在 Firebase 前面有一个 WebService 来进行任何数据操作。否则如何实现重要的业务逻辑?
"rules": {
"taskUsers": {
".read": "auth != null",
"$uid": {
// authenticated users can write as long as they have a notification property
".write": "auth != null && (auth.uid == $uid || newData.hasChild('notification'))",
"notification": {
// Bonus rule: only increment the number by 1 or -1
".validate": "newData.isNumber() && ((!data.exists() && newData.val() === 1 || newData.val() === -1) || newData.val() === data.val()+1 || newData.val() === data.val()-1)",
}
},
},
}