这个 firebase 安全规则是多余的吗?
Is this firebase security rule redundant?
我有一个 collection 的 users
,我有一个单独的 collection 的 usernames
。在我的 collection usernames
中,我将不同的用户名存储为 doc_ids
。也就是说,在 collection usernames
下,我可以将 doc_ids
作为 first
、second
、third
等。在每个 doc_id
下,我存储以下信息:
{
ownerId: id,
dateUpdated: someDate
}
当我更改某些用户的用户名时,我执行批量查询,首先删除 oldUsername
文档,然后插入具有适当字段的 newUsername
文档。我的问题是关于与 usernames
collection 相关的安全规则之一。我是否需要检查我是否已经拥有这样的用户名(即 doc_id
)。我是否需要以下规则:
match /usernames/{username} {
allow create: if !exists(/databases/$(database)/documents/usernames/$(username))
}
我认为这条规则是多余的,因为我强制执行 collection id 的唯一性,但我已经在其他几个帖子上看到了,所以我想看看其他人的意见。
是的,该规则没有任何作用,因为 create
仅在文档尚不存在时才会触发。如果文档已经存在,它的 .update
将被触发。
这种类型的检查在 .write
中很常见,但在您使用更精细的 .create
时不需要。
我有一个 collection 的 users
,我有一个单独的 collection 的 usernames
。在我的 collection usernames
中,我将不同的用户名存储为 doc_ids
。也就是说,在 collection usernames
下,我可以将 doc_ids
作为 first
、second
、third
等。在每个 doc_id
下,我存储以下信息:
{
ownerId: id,
dateUpdated: someDate
}
当我更改某些用户的用户名时,我执行批量查询,首先删除 oldUsername
文档,然后插入具有适当字段的 newUsername
文档。我的问题是关于与 usernames
collection 相关的安全规则之一。我是否需要检查我是否已经拥有这样的用户名(即 doc_id
)。我是否需要以下规则:
match /usernames/{username} {
allow create: if !exists(/databases/$(database)/documents/usernames/$(username))
}
我认为这条规则是多余的,因为我强制执行 collection id 的唯一性,但我已经在其他几个帖子上看到了,所以我想看看其他人的意见。
是的,该规则没有任何作用,因为 create
仅在文档尚不存在时才会触发。如果文档已经存在,它的 .update
将被触发。
这种类型的检查在 .write
中很常见,但在您使用更精细的 .create
时不需要。