You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Drive API创建权限时遇Permission value字段必填错误

问题:设置Google Drive文件所有者时出现"Permission value field required"错误

我通过Google Sheets API创建谷歌电子表格,再使用Google Drive API修改该表格文件的权限以设置新所有者。尽管已按照官方文档传递参数,仍出现如下错误:

An error occurred while creating permission: <HttpError 400 when requesting https://www.googleapis.com/drive/v2/files/1xVPxNHQmbO2RSbzbTg7K3qLa8fURP3S_xkIStMVIpK8/permissions?alt=json returned "Permission value field required". Details: "[{'domain': 'global', 'reason': 'required', 'message': 'Permission value field required', 'locationType': 'other', 'location': 'permission.value'}]">

我使用的是Google官方文档中的代码片段:

def driveService(fileID, email):
    drive_service = build('drive', 'v2')
    insert_permission(drive_service, fileID, email, "user", "owner")


def insert_permission(service, file_id, email, perm_type, role):
  """Insert a new permission.

  Args:
    service: Drive API service instance.
    file_id: ID of the file to insert permission for.
    value: User or group e-mail address, domain name or None for 'default'
           type.
    perm_type: The value 'user', 'group', 'domain' or 'default'.
    role: The value 'owner', 'writer' or 'reader'.
  Returns:
    The inserted permission if successful, None otherwise.
  """
  
  new_permission = {
      'type': perm_type,
      'role': role,
      'value': email
  }
  
  try:
    return service.permissions().insert(
        fileId=file_id, body=new_permission).execute()
  except errors.HttpError as error:
    print('An error occurred while creating permission: %s' % error)
  return None

解决方法

这个错误的核心原因是:在Drive API v2中,当权限类型为user或group时,需要使用emailAddress字段指定用户邮箱,而非代码中使用的value字段。官方旧代码片段未及时更新,导致参数字段不匹配。

修复后的代码

修改insert_permission函数中的权限字典,将'value': email替换为'emailAddress': email:

def driveService(fileID, email):
    drive_service = build('drive', 'v2')
    insert_permission(drive_service, fileID, email, "user", "owner")


def insert_permission(service, file_id, email, perm_type, role):
  """Insert a new permission.

  Args:
    service: Drive API service instance.
    file_id: ID of the file to insert permission for.
    value: User or group e-mail address, domain name or None for 'default'
           type.
    perm_type: The value 'user', 'group', 'domain' or 'default'.
    role: The value 'owner', 'writer' or 'reader'.
  Returns:
    The inserted permission if successful, None otherwise.
  """
  
  new_permission = {
      'type': perm_type,
      'role': role,
      'emailAddress': email  # 替换为emailAddress字段
  }
  
  try:
    return service.permissions().insert(
        fileId=file_id, body=new_permission).execute()
  except errors.HttpError as error:
    print('An error occurred while creating permission: %s' % error)
  return None

额外注意事项

设置文件所有者时需满足以下条件:

  • 当前操作账号必须是文件的原始所有者,或拥有G Suite/Workspace管理员权限(允许跨域转移所有权)
  • 目标邮箱必须对应有效的Google账号,或与当前账号属于同一Workspace域(跨域转移需管理员授权)

内容的提问来源于stack exchange,提问作者soCalJack23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:01:25