Firestore安全规则。用户可以知道用户的UID吗?

时间:2020-05-12 01:23:30

标签: firebase google-cloud-firestore firebase-security

所以我现在有一个集合,其结构如下:

公司(集合)->公司(文档)->文档具有包括auth UID的数据,以及一个名为雇员的子集合,如果可以的话,该子集合具有单独的雇员文档。

我有两个问题。

  1. 基本上,我希望任何经过身份验证的用户都能够读取数据,因此,如果他想读取公司uid,那么任何用户,以及其他数据(包括子集合中使用的数据)都将被使用。但是对于写许可权,我只希望公司能够编辑自己的文档及其雇用子集合文档。因此,为了完成此操作,我使用了以下安全代码
match /databases/{database}/documents {

    match /companies/{companyID} {
        allow read: if request.auth.uid != null;
        allow create,update: if request.auth.uid == resource.data.uid && request.auth.uid == request.resource.data.uid 
        allow delete: if request.auth.uid == resource.data.uid
    }
    match /companies/{companyID}/employs/{employID}{
        allow read: if request.auth.uid != null
        allow write: if request.auth.uid == get(/databases/$(database)/documents/brands/$(document)).data.uid && request.auth.uid == request.resource.data.uid 

    }

  }

所以我的第一个问题是,其他用户能够读取其他用户的UID是否还可以,因为我不知道其他处理写入权限的方法,因为我目前正在检查文档ID是否匹配request.auth.uid。在文档中,他们似乎也是如此。但是我只需要确保将用户uid设为“公开”就可以了。

第二,我的实现对吗?为了达到预期效果,我还需要做些其他事情吗?请提供反馈或建议,谢谢!

1 个答案:

答案 0 :(得分:1)

如果您的安全规则设置正确,则通常不需要知道UID。但是,您必须自己进行评估。我们不能肯定地说不看您在系统中使用它的所有方式。

您必须这样考虑:如果任意用户知道另一个任意用户的UID,那么对另一个人的了解又是什么?如果可以在没有他们的情况下获取个人身份信息同意,您可能应该更正。如果用户的数据可以以任何方式更改(同样,未经他们的同意),那么您也有问题。

UID本身不包含任何信息。这只是一个随机字符串。传入请求不可能“欺骗”它。对于已登录的用户,request.auth.uid始终是正确的UID,没有其他人。

您的规则看起来不错,但我强烈建议testing them using the local emulator。您可以使用编写的测试代码来验证自己是否确实达到了您的期望。