如果字符串与属性匹配,则 Firebase 实时数据库允许 read/write
Firebase Realtime Database Allow read/write if string matches an attribute
我的 firebase 实时数据库结构:
stores
-store1234
-data
-specialKeyForStore1234
-store4567
-data
-specialKeyForStore4567
-...
我的目标:
-数据 应该public 每个人都可读,但只有拥有数据的商店才能 add/edit/remove 数据
现在我的webapp中不需要登录认证访问数据库,但是为了限制其他人更改其他商店的数据,我想实现这样的东西:
如果store1234想要write/edit自己的data,需要提供这个specialKeyForStore1234.
store1234的实际webapp有这个特殊的key,可以和数据库中的value进行比较匹配,如果匹配,则允许读写.否则拒绝。
如何做到?
要发送特殊密钥,请向模型添加一个字段 specialKey
。
基本上,检查 model-key specialKey
是否等于 database-field specialKey
。
这种方法的明显问题是,模型的 specialKey
然后会与每个对象保持一致,下面也有一个建议。
注:newData
为传入model-data.
下面的代码可能指向正确的方向。我没有测试它,可能做出了错误的假设。
规则
{
"rules": {
"shops": {
"$shop_id" {
"payload" {
".read": if true,
// OPTION A
".write": "root.child(shops).child($shop_id)
.child(newData.child('specialKey)).exists()"
// OPTION B
//
// Try deleting the secrectKet in the model.
// No idea if this works in real life.
// === seems to be correct for assigning values?
".write": "root.child(shops).child($shop_id)
.child(newData.child('specialKey)).exists()
&& newData.child('specialKey).val() === '' "
},
"specialKey" {
// is READ:false ok to be processed by rule above?
".read": if false,
".write": if false,
}
}
}
}
}
数据结构
{
"shops": {
"shop-a": {
"payload": "yourPayload",
"SuperSecretSpecialKey123": true
}
}
}
来源
https://firebase.google.com/docs/rules/rules-language#building_conditions
底线
可能值得考虑一个正常的身份验证过程,然后可以分配用户 write-roles 和用户正确的身份验证。
我的 firebase 实时数据库结构:
stores
-store1234
-data
-specialKeyForStore1234
-store4567
-data
-specialKeyForStore4567
-...
我的目标:
-数据 应该public 每个人都可读,但只有拥有数据的商店才能 add/edit/remove 数据
现在我的webapp中不需要登录认证访问数据库,但是为了限制其他人更改其他商店的数据,我想实现这样的东西:
如果store1234想要write/edit自己的data,需要提供这个specialKeyForStore1234.
store1234的实际webapp有这个特殊的key,可以和数据库中的value进行比较匹配,如果匹配,则允许读写.否则拒绝。
如何做到?
要发送特殊密钥,请向模型添加一个字段 specialKey
。
基本上,检查 model-key specialKey
是否等于 database-field specialKey
。
这种方法的明显问题是,模型的 specialKey
然后会与每个对象保持一致,下面也有一个建议。
注:newData
为传入model-data.
下面的代码可能指向正确的方向。我没有测试它,可能做出了错误的假设。
规则
{
"rules": {
"shops": {
"$shop_id" {
"payload" {
".read": if true,
// OPTION A
".write": "root.child(shops).child($shop_id)
.child(newData.child('specialKey)).exists()"
// OPTION B
//
// Try deleting the secrectKet in the model.
// No idea if this works in real life.
// === seems to be correct for assigning values?
".write": "root.child(shops).child($shop_id)
.child(newData.child('specialKey)).exists()
&& newData.child('specialKey).val() === '' "
},
"specialKey" {
// is READ:false ok to be processed by rule above?
".read": if false,
".write": if false,
}
}
}
}
}
数据结构
{
"shops": {
"shop-a": {
"payload": "yourPayload",
"SuperSecretSpecialKey123": true
}
}
}
来源
https://firebase.google.com/docs/rules/rules-language#building_conditions
底线
可能值得考虑一个正常的身份验证过程,然后可以分配用户 write-roles 和用户正确的身份验证。