在 Box 中更改文件夹所有权
Change folder ownership in Box
我们有两个用户,UserA 和 UserB。我想把UserB的所有文件和文件夹转移到UserA。
我们正在使用协作 API 来执行此任务。但是出现以下错误
{"type":"error","status":404,"code":"not_found","context_info":{"errors":[{"reason":"invalid_parameter","name":"role","message":"Invalid value 'Owner'. 'role' with value 'Owner' not found"}]},"help_url":"http://developers.box.com/docs/#errors","message":"Not Found","request_id":"304354248562a743910984"}
当我将 "owner" 以外的任何内容作为请求中的角色传递时,我得到了有效响应。我不知道 "owner" 角色有什么问题。
这是请求
POST https://api.box.com/2.0/collaborations/ HTTP/1.1
As-User: 254598270
Authorization: Bearer UPSUE228kXGuDBGzy07G5fGxIrDL1QDj
Content-Type: text/plain; charset=utf-8
Host: api.box.com
Content-Length: 108
Expect: 100-continue
Accept-Encoding: gzip, deflate
{"item":{"id":"5092905410","type":"folder"},"accessible_by":{"id":"254608030","type":"user"},"role":"owner"}
我认为文档可能有误。考虑到协作的工作方式,在协作中指定 "owner" 角色并没有多大意义。
但是,move user's folder 端点可能正是您要寻找的。它允许您将一个用户的整个根文件夹移动到另一个用户的帐户中。下面是一个 cURL 请求示例:
curl https://api.box.com/2.0/users/USER_ID/folders/FOLDER_ID \
-H "Authorization: Bearer ACCESS_TOKEN" \
-d '{"owned_by": {"id": "USER_ID"}}' \
-X PUT
请注意,目前仅支持根文件夹(即文件夹 ID 0)。幸运的是,看起来这就是您要移动的文件夹。
所缺少的只是您必须先将他们添加为编辑者,然后才能将他们设为所有者。
如果你关注https://developer.box.com/guides/folders/single/change-owner/
您会发现转移所有权实际上并不需要移动文件夹。这是一个非常简单的两(或三)步过程:
- 将新用户添加为角色
EDITOR
的协作者
- 立即将该协作更新为
OWNER
的角色
就是这样。 (可选)您现在可以删除已从所有者降级为编辑者的原始所有者的协作。
这是我使用 Python SDK 的示例:
bc = box.BoxClient() # This is my own client wrapper
owner = bc.get_user(old_owner.lastname)
user_client = bc.get_user_client(owner.id) # Get a user_client for the owner
src_folder = user_client.folder(FOLDER_ID)
target = bc.get_user('new_owner.lastname')
new_collab = src_folder.collaborate(target, CollaborationRole.EDITOR)
updated_collaboration = new_collab.update_info(CollaborationRole.OWNER)
# Now we can remove the original owner as collaborator:
for collab in src_folder.get_collaborations():
target = collab.accessible_by
if target.id == owner.id:
collab.delete()
我们有两个用户,UserA 和 UserB。我想把UserB的所有文件和文件夹转移到UserA。
我们正在使用协作 API 来执行此任务。但是出现以下错误
{"type":"error","status":404,"code":"not_found","context_info":{"errors":[{"reason":"invalid_parameter","name":"role","message":"Invalid value 'Owner'. 'role' with value 'Owner' not found"}]},"help_url":"http://developers.box.com/docs/#errors","message":"Not Found","request_id":"304354248562a743910984"}
当我将 "owner" 以外的任何内容作为请求中的角色传递时,我得到了有效响应。我不知道 "owner" 角色有什么问题。
这是请求
POST https://api.box.com/2.0/collaborations/ HTTP/1.1
As-User: 254598270
Authorization: Bearer UPSUE228kXGuDBGzy07G5fGxIrDL1QDj
Content-Type: text/plain; charset=utf-8
Host: api.box.com
Content-Length: 108
Expect: 100-continue
Accept-Encoding: gzip, deflate
{"item":{"id":"5092905410","type":"folder"},"accessible_by":{"id":"254608030","type":"user"},"role":"owner"}
我认为文档可能有误。考虑到协作的工作方式,在协作中指定 "owner" 角色并没有多大意义。
但是,move user's folder 端点可能正是您要寻找的。它允许您将一个用户的整个根文件夹移动到另一个用户的帐户中。下面是一个 cURL 请求示例:
curl https://api.box.com/2.0/users/USER_ID/folders/FOLDER_ID \
-H "Authorization: Bearer ACCESS_TOKEN" \
-d '{"owned_by": {"id": "USER_ID"}}' \
-X PUT
请注意,目前仅支持根文件夹(即文件夹 ID 0)。幸运的是,看起来这就是您要移动的文件夹。
所缺少的只是您必须先将他们添加为编辑者,然后才能将他们设为所有者。
如果你关注https://developer.box.com/guides/folders/single/change-owner/
您会发现转移所有权实际上并不需要移动文件夹。这是一个非常简单的两(或三)步过程:
- 将新用户添加为角色
EDITOR
的协作者
- 立即将该协作更新为
OWNER
的角色
就是这样。 (可选)您现在可以删除已从所有者降级为编辑者的原始所有者的协作。
这是我使用 Python SDK 的示例:
bc = box.BoxClient() # This is my own client wrapper
owner = bc.get_user(old_owner.lastname)
user_client = bc.get_user_client(owner.id) # Get a user_client for the owner
src_folder = user_client.folder(FOLDER_ID)
target = bc.get_user('new_owner.lastname')
new_collab = src_folder.collaborate(target, CollaborationRole.EDITOR)
updated_collaboration = new_collab.update_info(CollaborationRole.OWNER)
# Now we can remove the original owner as collaborator:
for collab in src_folder.get_collaborations():
target = collab.accessible_by
if target.id == owner.id:
collab.delete()