Firestore:允许拒绝权限的事务

我们从Java应用程序引擎实例访问Firestore

非事务性请求正在成功,但事务失败并显示错误: firestore: PERMISSION_DENIED: Missing or insufficient permissions

示例交易

 final long updatedValue = 15; Firestore db = firebaseManager.getFirestore(); CollectionReference fooCollectionRef = db.collection(SOME_COLLECTION); DocumentReference fooDocumentRef = fooCollectionRef.document(fooId); final ApiFuture future = db.runTransaction(transaction -> { DocumentSnapshot snapshot = transaction.get(fooDocumentRef).get(); transaction.update(fooDocumentRef, SOME_FIELD, updatedValue); return updatedValue; }); return future.get(); 

据我所知,我们对开发项目的权限是完全开放的:

 service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write; } } } 

根据我的阅读,允许写入也应该允许事务更新工作,但它们和sime get调用都不起作用。

有谁知道我是否错过了一步/设置了不正确的权限?

(我已经看到关于Firestore权限被拒绝错误的其他类似问题,但在这些情况下规则更具体。目前,这个项目甚至不需要auth来访问Firestore。)

我遇到了同样的问题,但我设法解决了这个问题。 设置服务帐户并将Firestore实例指向该帐户。 您可以在此处创建服务帐户密钥。 这是一个示例代码块,显示如何使用服务帐户。 SERVICE_ACCOUNT_PATH是一个字符串,其中包含服务帐户的路径,PROJECT_ID是包含项目ID的字符串。

 private static void authenticate() throws Exception { FirestoreOptions firestoreOptions = FirestoreOptions.newBuilder() .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream(SERVICE_ACCOUNT_PATH))) .setProjectId(PROJECT_ID).build(); database = firestoreOptions.getService(); }