android - 允许用户在 Firestore 规则中首次尝试写入
问题描述
我现在处于一种特殊的情况。我正在实现一个 addFriend 功能。它将用户添加到一个名为“friends”的集合中,该集合包含一个文档 {uid},该文档是一个朋友 {uid} 的数组。
这是我的文档结构:
我希望用户只编辑他们的数据,所以我有规则:
function isSignedIn() {
return request.auth != null;
}
function isUser(userId) {
return request.auth.uid == userId;
}
match /friends/{userId} {
allow read:if isSignedIn();
allow create:if isSignedIn();
allow update: if isSignedIn() && isUser(userId);
现在安全漏洞正在创建中:任何登录的用户都可以创建,但我应该允许人们创建自己的数据。我可以通过将传入的文档名称与 uid 进行比较来做到这一点,但我不知道该怎么做。
这是我创建或更新朋友集合的代码:
FirebaseFirestore.getInstance().collection(FRIENDS).document(FirebaseAuth.getInstance().getUid())
.update("friends", FieldValue.arrayUnion(scorecard.getUid()))
.addOnCompleteListener(task -> {
if (task.isSuccessful()) ;
else {
Map<String, Object> m = new HashMap();
m.put("friends", FieldValue.arrayUnion(scorecard.getUid()));
FirebaseFirestore.getInstance().collection(FRIENDS).document(FirebaseAuth.getInstance().getUid())
.set(m);
}
});
解决方案
推荐阅读
- reactjs - 在另一个文件夹的不同组件中从一个函数发送数据
- c++ - EnTT:在运行时创建新的组件类型,还是“标记”实体子组?
- python - 在 django 中,通过表单发布新对象时,如何手动输入其外键?
- python - 我需要部署我的 lambda 来测试它是否正确?
- jquery-ui - 使用 jQuery UI 选项卡功能,为按钮获取多行但应该只有一行
- c++ - 这个内存分配器如何获得块的地址?
- kubernetes - 尝试使用 kubectl 在 AWS EKS 集群中创建命名空间 - 获取:来自服务器的错误(禁止):命名空间被禁止
- unity3d - 如何无缝地将内容访问从本地组切换到远程组(反之亦然)?
- java - 在 FitNesse 中测试 jar 文件
- c++ - 括号对数组指针有什么影响?