使用 Mobile Backend Starter (MBS) Android 类(在 Google Dev Console 中创建新项目并在 Google I/O 2013 上演示时作为示例项目分发的类)我能够将新实体插入云数据存储通过调用 CloudBackendMessaging.insertAll 或 .updateAll。如果实体不存在,后者将创建实体,因此看起来在功能上与插入新记录相同。
插入/创建工作正常。但是,当我尝试更新数据存储中的现有条目时,我收到了权限错误,例如(来自后端日志)
Method: mobilebackend.endpointV1.updateAll
Error Code: 401
Reason: required
Message: Insuffient permission for updating a CloudEntity: XXXXXX by: USER: YYYYYYY
这会导致 logcat 客户端出现匹配访问错误。
在所有情况下,我都使用有效的 Google 帐户(我自己的帐户)进行安全访问身份验证。
因此,插入的实体显示为我的用户 ID“拥有”,“更新者”和“创建者”显示我的 Google 帐户的电子邮件地址。
但是,当更新现有记录时,使用完全相同的 CloudBackendMessenger 对象并因此使用相同的凭据等。后端告诉我由于权限问题无法更新。但可以肯定的是,如果我只是用相同的凭据创建实体,那肯定是不正确的?查看文档,似乎我应该能够在所有情况下编辑同一用户 ID 拥有的实体(无论 KindName 是什么,也不管它是前置的 [public]、[private] 还是什么都没有)。
任何通过 Mobile Backend Starter for Datascore 收到更新权限错误的人都可以解释一下吗?今天大部分时间我都在为此苦思冥想。
最佳答案
在使用 cloudBackendAsync.update(cloudEntity) 时,我遇到了类似的错误“更新 CloudEntity 的权限不足”。我通过确保 cloudEntity 具有它的 createdAt 字段集来解决它。 createdAt 是自动生成的,我认为我不应该碰它。但这对我有用。就我而言,我首先获取云实体列表。这是我获得云实体的 createdAt 字段的时间。然后,当我更新时,我从以前获得的实体中设置 createdAt 字段。 编辑:也必须为所有者字段做类似的事情。
关于android - Google Cloud Datastore/Mobile Backend Starter - update/updateAll 调用权限失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23231800/