firebase - Firestore 安全规则。用户可以知道人们的 UID 吗?
问题描述
所以我现在有一个集合,结构如下
Companies (Collection) -> Company (Document) -> Document 包含包括身份验证 UID 在内的数据,以及一个名为 employees 的子集合,如果有意义的话,它具有单独的雇员文档。
我有两个问题。
- 基本上,我希望任何经过身份验证的用户都能够读取数据,因此任何用户,如果他想读取公司 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 是否与请求匹配。 auth.uid。在文档中,他们似乎也是这样做的。但我只需要确保用户 uid 可以“公开”。
其次,我的实施对吗?为了达到预期的效果,我还应该做些什么?请提供反馈或建议,谢谢!
解决方案
如果您的安全规则设置正确,则 UID 是否已知通常无关紧要。但是,您必须自己评估。如果没有看到您在系统中使用它的所有方式,我们不能肯定地说。
您将不得不这样考虑:如果任意用户知道另一个任意用户的 UID,那么可以知道其他人的什么信息? 如果有可能在未经他们同意的情况下获得个人身份信息,您可能应该更正它。如果可以以任何方式更改用户的数据(同样,未经他们的同意),那么您也会遇到问题。
UID 本身不包含任何信息。这只是一个随机字符串。它不可能被传入请求“欺骗”。 request.auth.uid
始终是登录用户的正确 UID,而不是其他用户。
您的规则看起来不错,但我强烈建议使用本地模拟器对其进行测试。您可以使用您编写的测试代码自己验证它们是否完全符合您的预期。
推荐阅读
- python-3.x - 如何使用python将一个表复制到同一个word文件中的另一个表中?
- php - 使用foreach循环从表中获取数据的问题
- c++ - ClearCommError():不支持 lpStat?
- python - 在生产中维护鹡鸰
- javascript - 在 Google Drive API v3 中使用 drive.files.copy 通过 nodejs 使用 API 将 Word 文档转换为 Google 文档
- django - 与Django中的自定义表的多对多关系
- javascript - 与方法签名有关的异常错误
- javascript - 使用过滤和优先级以及最小循环将数组转换为对象
- google-chrome - 迁移出 applicationCache (Chrome M82)
- flutter - Android Studio - 无法构建“任务':app:mergeDebugResources'的执行失败。”