我有设置firebase规则,供用户读取和写入数据库数据。现在,我想为管理员用户添加另一个规则。
我允许用户通过auth.uid访问,并希望为管理员用户设置另一个级别。
这是我当前的规则:
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
我正在通过在URL中传递$ uid来获取数据,如下所示:
`https://blablabla.firebaseio.com/users/${uid}/places.json?auth=` + authToken
用户正在通过电子邮件和密码进行注册。有没有办法我可以将特定用户添加为管理员,并设置另一个规则来访问所有数据?
答案 0 :(得分:0)
我通常会在规则中创建一个isAdmin
函数,然后可以从任何地方调用该函数。这是最近项目的示例:
function isAdmin(request) {
return request.auth.uid == "KqEizsqUQ6XMkUgLUpNxFnzLm4F3"
|| request.auth.uid == "zYXmog8ySOVRrSGVt9FHFr4wJb92"
|| (request.auth.token.email_verified && request.auth.token.email.matches(".*@google.com"))
;
}
因此,在此项目中,管理员组由两个UID以及使用已验证的Google电子邮件地址登录的任何人组成。
现在,我可以在其他任何规则中使用此功能:
match /users/{uid} {
allow read: if true;
allow create: if request.auth.uid == uid;
allow delete: if isAdmin(request);
}
因此任何人都可以阅读users
集合中的文档,每个用户可以创建自己的用户doc,但是只有管理员可以删除这些文档。