Firebase Auth没有“用户角色” API,但是您可以通过多种方法在应用程序中实现基于角色的授权.
数据库
正如您提到的,一种方法是将这些数据存储在数据库中.这样做的好处是易于实现.
您可以通过在Firestore和Realtime数据库的数据库规则中进行查找来实施规则.
{
"rules": {
"adminContent": {
".write": "root.child('users').child(auth.uid).child('admin').val() === true"
}
}
}
service cloud.firestore {
match /databases/{database}/documents {
match /articles/{article} {
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true
}
}
}
维护数据库中的角色和凭据的不利之处在于,您不能跨产品使用该信息.您不能编写访问RTDB规则的Firestore数据库规则,反之亦然.
海关索赔
如果您希望角色跨服务工作(在RTDB,Firestore和Firebase Storage中使用相同的角色数据),则应考虑设置自定义声明,这很好地解释了in the documentation.
设置完成后,您可以使用自定义声明在不同产品之间实施基于角色的或group access rights.
database.rules.json
{
"rules": {
"adminContent": {
".read": "auth.token.admin === true",
".write": "auth.token.admin === true",
}
}
}
firestore.rules / storage.rules
Firestore和Storage规则的规则语法相似,并且您发现两者的allow语句相同.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.token.admin == true;
}
}
}