如何设置我的安全规则,以便只有users/$provider/$user/admin == true
的用户才能添加和删除新的管理员。
以下是我的Firebase规则:
{
"rules": {
"users": {
"$provider": {
"$user": {
"profile": {
".read": "$user == auth.id && $provider == auth.provider",
".write": "$user == auth.id && $provider == auth.provider"
},
"admin": {
".read": false,
".write": false
}
}
}
},
"blogs": {
".read": true,
".write": "root.child('users').child(auth.provider).child(auth.id).child('admin').val() == true",
"$blog": {
".validate": "newData.hasChildren(['article', 'time', 'title'])"
}
}
}
}
我的另一个问题是,我可以混合来自不同auth.id
的{{1}},它们是唯一的吗?我希望删除用户层次结构中的auth.provider
有点难看。
答案 0 :(得分:3)
我希望我能正确理解你需要的东西:
{
"rules": {
"users": {
"$provider": {
"$user": {
"profile": {
".read": "$user == auth.id && $provider == auth.provider",
".write": "$user == auth.id && $provider == auth.provider"
},
"admin": {
".read": "auth.admin == true",
".write": "auth.admin == true"
}
}
}
},
"blogs": {
".read": true,
".write": "root.child('users').child(auth.provider).child(auth.id).child('admin').val() == true",
"$blog": {
".validate": "newData.hasChildren(['article', 'time', 'title'])"
}
}
}
}
关于第二个问题,我认为你根本不需要保存提供者,因为如果用户使用不同的提供者登录,它应该被视为新用户,除非firebase真正跟踪唯一的东西是唯一的和持久的登录这是电子邮件,我非常怀疑他们这样做。我99%肯定的赌注是,当授权提供商被切换时auth.id
会发生变化,但这一点并不难以测试吗?
答案 1 :(得分:0)
虽然id
属性是指定提供商的ID,但uid
在所有提供商中都是唯一的,并且是您的用户的正确索引,特别是如果您使用多个提供者一次。
注意: Firebase更新了其API,不再在客户端库版本1.1.0的安全规则id
变量中返回普通的,特定于提供程序的auth
属性,或者之后(2014年10月3日发布)。