相关疑难解决方法(0)

Firestore安全规则 - 如何检查字段是否被修改?

对于我的生活,我无法理解为什么以下导致false允许写入.假设我的users集合是空的,我正在从我的Angular前端编写以下表单的文档:

{
  displayName: 'FooBar',
  email: 'foo.bar@example.com'
}
Run Code Online (Sandbox Code Playgroud)

我目前的安全规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      function isAdmin() {
        return resource.data.role == 'ADMIN';
      }

      function isEditingRole() {
        return request.resource.data.role != null;
      }

      function isEditingOwnRole() {
        return isOwnDocument() && isEditingRole();
      }

      function isOwnDocument() {
        return request.auth.uid == userId;
      }

      allow read: if isOwnDocument() || isAdmin();
      allow write: if !isEditingOwnRole() && (isOwnDocument() || isAdmin());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

一般来说,我希望没有用户能够编辑自己的角色.普通用户可以编辑自己的文档,管理员可以编辑任何人.

Stubbing isEditingRole()for false给出了预期的结果,所以我把它缩小到那个表达式.

写入不断变回虚假,我无法确定原因.任何想法或修复都会有所帮助!

编辑1

我试过的事情:

function …
Run Code Online (Sandbox Code Playgroud)

firebase firebase-security google-cloud-firestore

13
推荐指数
3
解决办法
5541
查看次数