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

如何通过Google Drive API及PHP google/apiclient库获取文件/文件夹权限创建者信息

如何获取Google Drive权限(共享操作)的创建者信息?

问题描述

我开发了一款基于PHP的应用,采用google/apiclient库进行开发。目前我需要检索出为文件或文件夹创建权限(即执行文件/文件夹共享操作)的用户信息,请问是否存在对应的API或实现方法可以获取该权限创建者的相关信息?以下是我当前持有的Permission对象:

0 => Google_Service_Drive_Permission^ {#166 
#collection_key: "teamDrivePermissionDetails" 
+allowFileDiscovery: null 
+deleted: false 
+displayName: "My Drives" 
+domain: null 
+emailAddress: "shared@mydomain.com" 
+expirationTime: null 
+id: "42334331410813143544" 
+kind: "drive#permission" 
#permissionDetailsType: "Google_Service_Drive_PermissionPermissionDetails" 
#permissionDetailsDataType: "array" 
+photoLink: "https://lh3.googleusercontent.com/a-/Abrbrb7k54odEg7qpULhrrzPcNImd7EBgBLgUOPeK=s64" 
+role: "organizer" 
#teamDrivePermissionDetailsType: "Google_Service_Drive_PermissionTeamDrivePermissionDetails" 
#teamDrivePermissionDetailsDataType: "array" 
+type: "user" 
+view: null 
#internal_gapi_mappings: [] 
#modelData: [] 
#processed: [] 
+"teamDrivePermissionDetails": array:1 [ 
0 => Google_Service_Drive_PermissionTeamDrivePermissionDetails^ {#62 
+inherited: false 
+inheritedFrom: null 
+role: "organizer" 
+teamDrivePermissionType: "member" 
#internal_gapi_mappings: [] 
#modelData: [] 
#processed: [] 
} 
] 
+"permissionDetails": array:1 [ 
0 => Google_Service_Drive_PermissionPermissionDetails^ {#1151 
+inherited: false 
+inheritedFrom: null 
+permissionType: "member" 
+role: "organizer" 
#internal_gapi_mappings: [] 
#modelData: [] 
#processed: [] 
} 
] 
}

解决方案

好问题!我刚好之前处理过类似的需求,咱们一步步来梳理:

1. 先明确:直接从Permission对象拿不到创建者信息

你贴的Google_Service_Drive_Permission对象里确实没有包含权限创建者的字段——Google Drive的Permission资源本身只记录权限的核心属性(比如角色、类型、目标用户),并不存储「谁创建了这个权限」这类操作日志信息。

2. 可行方案:调用Drive API的「改动历史」或「活动记录」接口

要获取权限创建者信息,需要通过Drive的操作日志类接口来查询,这里有两个靠谱的方式:

方式一:使用Changes.list接口(基于Drive API)

这个接口可以列出Drive内的所有改动记录,包括权限添加操作。你可以筛选出changeType为permission的改动,再通过fileId和permissionId匹配你要查询的目标权限,改动记录里的user字段就是创建该权限的用户信息。

PHP代码示例:

// 初始化Drive服务
$driveService = new Google_Service_Drive($client);

// 获取改动记录的起始页令牌(首次调用可以用null,后续用返回的nextPageToken分页)
$startPageToken = $driveService->changes->getStartPageToken()->getStartPageToken();
$changes = $driveService->changes->listChanges($startPageToken);

foreach ($changes->getChanges() as $change) {
    // 筛选出目标文件的权限改动,匹配你要查询的permissionId
    if ($change->getChangeType() === 'permission' 
        && $change->getFileId() === '你的目标文件ID' 
        && $change->getPermissionId() === '你要查询的权限ID') {
        
        // 获取创建者信息
        $creator = $change->getUser();
        echo "权限创建者邮箱:" . $creator->getEmailAddress() . "\n";
        echo "权限创建者名称:" . $creator->getDisplayName() . "\n";
        break;
    }
}

// 如果有更多分页,需要循环处理nextPageToken
while ($changes->getNextPageToken()) {
    $changes = $driveService->changes->listChanges($changes->getNextPageToken());
    // 重复上述筛选逻辑
}

注意事项:

  • 需要具备drive.readonly或更高权限
  • 改动记录有保留期限,过旧的操作可能无法查询到
方式二:使用Activities.list接口(基于Drive Activity API,推荐更精准)

这个接口专门用于获取Drive的活动日志,支持更精细的筛选条件,能直接定位到「添加权限」的操作,活动记录里的actor字段就是权限创建者。

步骤说明:

  1. 先在Google Cloud控制台启用「Drive Activity API」
  2. 使用以下PHP代码查询:
// 初始化Drive Activity服务
$driveActivityService = new Google_Service_DriveActivity($client);

// 构建查询请求,筛选目标文件的权限添加活动
$request = new Google_Service_DriveActivity_QueryDriveActivityRequest();
// 筛选条件:动作类型为添加权限,且目标文件为指定ID
$request->setFilter("detail.action_detail_case:PERMISSION_ADD AND itemName='items/你的目标文件ID'");

$activities = $driveActivityService->activity->query($request);

foreach ($activities->getActivities() as $activity) {
    // 遍历活动中的执行者(即权限创建者)
    $actors = $activity->getActors();
    $targetCreator = null;
    foreach ($actors as $actor) {
        if ($actor->getUser()) {
            $targetCreator = $actor->getUser();
            break;
        }
    }

    // 匹配对应的permissionId(一个文件可能有多次权限添加操作)
    $details = $activity->getDetails();
    foreach ($details as $detail) {
        if ($detail->getPermissionAdd()) {
            $permissionId = $detail->getPermissionAdd()->getPermission()->getId();
            if ($permissionId === '你要查询的权限ID') {
                // 输出创建者信息
                echo "权限创建者邮箱:" . $targetCreator->getEmail() . "\n";
                echo "权限创建者名称:" . $targetCreator->getDisplayName() . "\n";
                break 2;
            }
        }
    }
}

注意事项:

  • 需要具备drive.activity.readonly权限
  • 对Shared Drive(原Team Drive)的支持更友好,能准确关联到团队内的操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:19:05