如何检查Firebase规则中具有未知键的现有数据的值?
使用Firebase安全规则,如何检查同级值以确定如何检查Firebase规则中具有未知键的现有数据的值?,firebase,firebase-security,Firebase,Firebase Security,使用Firebase安全规则,如何检查同级值以确定newData是否有效 在我的应用程序中,每个游戏都有移动列表。这里的游戏是1405584062293: 当提交一个新的移动时,我想参照已经播放的移动来验证它。对于初学者来说,一个玩家应该只能玩每秒的移动(玩家一可以玩从索引0开始的偶数移动,玩家二可以玩奇数移动) 由于每一步的关键是一个未知的随机字符串(根据),我不知道如何检查前一步。我也不知道如何计算现有移动的数量 这是我的结构: { "rules":{ ".read":true
newData
是否有效
在我的应用程序中,每个游戏
都有移动列表
。这里的游戏是1405584062293
:
当提交一个新的移动时,我想参照已经播放的移动来验证它。对于初学者来说,一个玩家应该只能玩每秒的移动(玩家一可以玩从索引0
开始的偶数移动,玩家二可以玩奇数移动)
由于每一步的关键是一个未知的随机字符串(根据),我不知道如何检查前一步。我也不知道如何计算现有移动的数量
这是我的结构:
{
"rules":{
".read":true,
"games":{
"$game":{
"moves":{
"$move":{
".write":"auth !== null",
// Something along these lines would get me going...
".validate":"data.parent().keys.count % 2 == 0"
}
}
}
}
}
}
实际上,游戏规则要复杂得多,我希望我需要使用Firesafe或类似的解决方案,但现在我想知道如何实现这些和其他类似的简单规则。只要你不撤消移动(例如,从Firebase中的列表中删除移动),将其存储为数组(imo)没有什么错
如果从数组中删除元素,会出现问题,因为索引中的数字将被跳过,Firebase将不再将其视为数组,而是将其视为具有数字作为键的对象。并非每个用例都能适合管理通用列表的单一推荐方法。当然不是你的。您可能会发现这种方法更有用 由于不能对子记录键/值执行包含操作,因此将维护一个可以递增的值。例如,利用上面的增量ID方法,我可以编写一个安全规则,以确保我正在写入奇数密钥(并且仅在轮到我时),如下所示:
".validate": "((root.child('counter').val()||0)+1) % 2 === root.child('users').child(auth.uid).child('evenOrOdd').val()"
有,并且包括由多个用户同时编辑的任何数据。这并不像从不删除那么简单。谢谢你的帮助!实际上,我最终解决了我的问题,只需选择移动id(
move-0
,move-1
,move-2
)。由于可以合理地假设玩家将拥有游戏的完整移动列表,因此不需要计数器。一切都好了。