Javascript 如何制定Firebase规则,确保您只能在字段中输入某些内容?
比如说,我使用Firebase运行一个留言板,其中每个帖子都必须首先得到版主的批准 因此,帖子可以有三种“状态”之一:Javascript 如何制定Firebase规则,确保您只能在字段中输入某些内容?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,比如说,我使用Firebase运行一个留言板,其中每个帖子都必须首先得到版主的批准 因此,帖子可以有三种“状态”之一: 未经审查 批准 拒绝 我发现制定这条规则的唯一方法是: { "rules": { "posts": { ".write": "newData.child('status').val() == 'unreviewed' || newData.child('status').val() == 'approved' || newDa
- 未经审查
- 批准
- 拒绝
{
"rules": {
"posts": {
".write": "newData.child('status').val() == 'unreviewed' || newData.child('status').val() == 'approved' || newData.child('status').val() == 'rejected"
}
}
}
这看起来效率很低,而且不干燥。有没有其他方法可以确保字段的值始终是少数几个值中的一个?安全规则语言是JavaScript的有限子集,因此无法完全清除重复。。。但是,您当然可以将其缩短一点,同时使其更不容易出错
旁注:避免安全问题 尝试中的一个问题是使用
.write
规则验证数据。如果任何父级或更高级别的规则授予对此子树的写访问权,则这些规则将被完全忽略
但不要担心,您只需将数据验证移到。验证规则即可。它们总是在写操作时进行评估和强制执行,唯一的例外是管理员用户
清理规则
重新构造规则以遵循预期的模式有助于极大地提高可读性,即使字符数不会少很多
{
"rules": {
"posts": {
"$postId": { // (1)
".validate": "newData.child('status').exists()", // (2)
"status": {
".validate": "newData.val() == 'unreviewed' || newData.val() == 'approved' || newData.val() == 'rejected"
}
}
}
}
}
我添加此级别是因为我假设您要存储一个帖子列表,而不仅仅是/posts
下的一篇帖子
应该在post上列出所需的子节点(或“字段”)。如果未在新帖子中设置状态的验证规则,则将忽略该规则
另外,请看一下。它可以帮助您干燥安全规则并生成验证规则。谢谢!这很有帮助。我以前没听说过博尔特。