У меня есть веб-приложение PHP, интегрированное с GoogleDriveAPI v3, которое создает папки на Google Диске, устанавливает различные разрешения для списка пользователей, показывает каждому пользователю содержимое папки, и пользователи должны иметь возможность получить доступ к файлам (что имеют те же права доступа к папке), открывая их в новом окне вне моего приложения, непосредственно в Google Docs. Эти пользователи могут не иметь учетной записи Google.
В моей базе данных хранится идентификатор папки, полученный с помощью Google Drive API, и идентификаторы разрешений, полученные при их установке.
Когда пользователи просматривают содержимое папки, мое приложение вызывает соответствующий API для получения списка файлов внутри папки (см. Здесь https://developers.google.com/drive/api/v3/reference/files/list), и я управляю ключом jView webViewLink, который является ссылкой на документ, но Я не знаю, как дать способ открыть файл непосредственно в Документах Google, передавая разрешения для тех пользователей, которые не имеют учетной записи Google.
Я попытался создать и опубликовать документ вне приложения, прямо в папке Google Drive, и получил электронное письмо со ссылкой, подобной этой:
https://docs.google.com/document/d/xxxxxx-file-id/edit?usp=sharing_eip&ts=5d03b1c1 Примечание: я не могу опубликовать правильную ссылку из-за зарезервированного контента.
Открыв ссылку, я смог изменить документ, даже если я не вошел в систему как учетная запись Google (мой псевдоним показан как животное), поэтому в некотором роде Google знает, что открыв ссылку, я могу редактировать файл.
//create Folder
public function createRootFolder($name, $folder_root)
{
$fileMetadata = new Google_Service_Drive_DriveFile(array(
'name' => $name,
"parents" => [$folder_root],
'mimeType' => 'application/vnd.google-apps.folder'));
$file = $this->service->files->create($fileMetadata, array(
'fields' => 'id'));
return $file;
}
//setPermission
public function setPermission($folderId, $typePermission = 'user' ,
$rolePermission , $emailAddress)
{
$return = false;
$this->service->getClient()->setUseBatch(true);
try {
$batch = $this->service->createBatch();
$userPermission = new Google_Service_Drive_Permission(array(
'type' => $typePermission,
'role' => $rolePermission,
'emailAddress' => $emailAddress,
'setDisplayName' => $emailAddress
));
$request = $this->service->permissions->create(
$folderId, $userPermission, array('fields' => 'id')
);
$batch->add($request, 'user');
$results = $batch->execute();
foreach ($results as $result) {
if ($result instanceof Google_Service_Exception) {
$return = null;
} else {
$return = $result->id ;
}
}
} finally {
$this->service->getClient()->setUseBatch(false);
}
return $return;
}
//getFileList
public function getFileList($folderId=null)
{
$l = [];
$optParams = array(
'fields' => '*',
'q' => '\''.$folderId.'\' in parents'
);
$response = $this->service->files->listFiles($optParams);
$ll = [];
foreach ($response->files as $file) {
array_push($l,
array(
'id'=>$file->id,'name'=>$file->name,
'modifiedTime'=>$file->modifiedTime,
'createdTime'=> $file->createdTime,
'webViewLink' => $file->webViewLink
));
array_push($ll ,array('file', $file));
}
return $l;
}
Здесь я хотел бы открыть файл Документов Google
<a href="https://docs.google.com/document/d/xxxxxx-file-id/edit">Apri</a>
Я предполагаю, что, поскольку я могу открывать и изменять файл, когда я получаю ссылку по электронной почте, я могу создать такую же ссылку для пользователей, чтобы открыть ее через мое приложение.