我有一个Android应用程序,人们可以在聊天室上写一些东西。
他们使用Google帐户登录。我有他们的用户ID,下面显示$ uid
但如果有人写一些愚蠢的东西我想阻止这个人的写作能力。
那么我怎么能通过使用这个身体来做到这一点。或者你的建议是什么?
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
答案 0 :(得分:1)
更新了答案
首先,您必须更改禁用的用户JSON模型以遵循格式。
路径模式
/ banned-users / $ userid:true
来自上方图片
/ banned-users / fasjdkflksdflad:true
现在将规则更改为以下方式
{
"rules": {
"messages": {
"$messageId": {
".read": "auth.uid != null",
".write": "auth.uid != null && !root.child('/banned-users/'+auth.uid).exists()"
}
},
}
}
假设您要将消息添加到/ messages路径,每条消息ID为$ messagesId,然后您的/ messages路径如下所示
{
"messages": {
"-KTKvywjwDv4RpYjQglu":{
"text": "Hey Guys..."
},
"-KTKvywjwDv4RpYjQglu":{
"text": "How you doing ..."
}
}
}
解释
根据规则,任何登录的用户都可以阅读/ ".read": "auth.uid != null",
定义的那些。
要写入消息到/ messages路径,然后firebase检查(用户是否登录 AND / banned-users / user-id path存在)火力点。由于auth.uid
是规则验证时使用的内部firebase变量。 ".write": "auth.uid != null && !root.child('/banned-users/'+auth.uid).exists()"
定义了这一点。
您可以忽略.validate
,只需使用.write
即可实现此目的。
旧回答
只有安全规则才能做到这一点。
首先,您必须使用Firebase cloud functions。
在/chats
数据库路径上创建数据库触发器。当新邮件包含愚蠢的内容时,您可以立即将其删除,然后您可以获取用户ID并将其保存到其他路径/banned-users/<userid>
现在您可以编写.validate规则来检查当前消息,用户ID不在禁止列表中。使用
".validate": "!root.child('/banned-users/'+$uid).exists()"
如果您必须完全停用用户帐户,则必须使用Firebase Admin API。
答案 1 :(得分:0)
您不需要在规则中执行此操作。你可以在&#34;身份验证&#34;中禁用该人的用户ID。 FirebaseConsole
的部分下面附带的截图作为样本
与添加到必须手动输入userID的规则相比,这会容易得多。