Firebase 为什么不是';Firestore安全规则是否正在执行?

Firebase 为什么不是';Firestore安全规则是否正在执行?,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我有以下消防队规则。我正在使用带有服务帐户密钥的AdminSDK访问Firestore service cloud.firestore { match /databases/{database}/documents { match /users/{user} { allow read, delete: if true; allow update, write: if getAfter(/databases/$(database)/documents/users

我有以下消防队规则。我正在使用带有服务帐户密钥的AdminSDK访问Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{user} {
      allow read, delete: if true;
      allow update, write: if getAfter(/databases/$(database)/documents/users/$(request.resource.id)).data.AccountId is int;
    }
  }
}
我想将
AccountId
字段作为
users
集合中的
int
强制执行,但我仍然可以在
AccountId
字符串的情况下进行写入(和批写入)

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{user} {
        allow read: if true;
        allow create, update: if request.resource.data.AccountId is int;
    }
  }
}
我正在尝试验证
users
集合中每个文档中的数据

下面是更新
用户
文档的代码:

try {
  await db.collection('users').doc('1').set({
    AccountId: '1234'
  })

} catch(e) {
  console.log(e)
}
这是不允许的,因为
AccountId
不是int

try {
  await db.collection('users').doc('1').set({
    AccountId: 1234
  })

} catch(e) {
  console.log(e)
}
这应该是允许的,因为
AccountId
是一个int

使用AdminSDK,我可以将
AccountId
设置为
字符串

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{user} {
        allow read: if true;
        allow create, update: if request.resource.data.AccountId is int;
    }
  }
}
编辑: 我已经更新了规则,我仍然能够将
AccountId
作为
字符串编写

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{user} {
        allow read: if true;
        allow create, update: if request.resource.data.AccountId is int;
    }
  }
}

AdminSDK无条件地绕过所有安全规则。这些规则仅适用于移动和web客户端。您需要检查代码本身是否正确