我正在尝试将所有权从服务帐户创建的文档转移到使用以下代码驻留在同一Google Apps帐户中的其他用户,但我收到以下错误
资源主体包括不可直接写入的字段。 [403] 错误[消息[资源主体包括不可直接写入的字段。]位置[ - ]原因[fieldNotWritable]域[全局]]
{{1}}
评论//权限.Role =“所有者”;返回以下错误
当权限角色为“所有者”时,必须启用transferOwnership参数。 [403]错误[消息[必须在权限角色为'所有者'时启用transferOwnership参数。]位置[transferOwnership - 参数]原因[禁止]域[全局]]
分配任何其他权限都可以。因此,这是服务帐户的限制,无法将所有权转移到不使用@ gserviceaccount.com电子邮件地址的任何其他帐户(即our-project@appspot.gserviceaccount.com> email@domain.com )?
已创建email@domain.com电子邮件地址,并在Google Apps中进行管理。
在这种情况下,这是不可能实现的,任何关于下一步要去哪里的指针?我们需要多个用户能够临时创建文档,并通过API动态分配权限和转移所有权。
由于
答案 0 :(得分:2)
我找到了答案,并且正在为遇到此问题的其他人发帖。
为模仿帐户创建驱动器服务的代码如下。
public DriveService GetService(string certificatePath, string certificatePassword, string googleAppsEmailAccount, string emailAccountToMimic, bool allowWrite = true)
{
var certificate = new X509Certificate2(certificatePath, certificatePassword, X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(googleAppsEmailAccount)
{
Scopes = new[] { allowWrite ? DriveService.Scope.Drive : DriveService.Scope.DriveReadonly },
User = emailAccountToMimic
}.FromCertificate(certificate));
// Create the service.
return new DriveService(new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName
});
}
您需要按照列出的here步骤将域范围的权限委派给服务帐户。
答案 1 :(得分:0)