すべての Google ドライブのファイル、フォルダ、共有ドライブには、関連付けられた permissions リソースがあります。各リソースは、特定の type(user、group、domain、anyone)と role(owner、organizer、fileOrganizer、writer、commenter、reader)の権限を識別します。たとえば、あるファイルには、特定のユーザー(type=user)に読み取り専用アクセス権(role=reader)を付与する権限があり、別の権限では、特定のグループ(type=group)のメンバーにファイルへのコメントの追加権限(role=commenter)を付与できます。
ロールと、各ロールで許可されるオペレーションの完全なリストについては、ロールと権限をご覧ください。
権限の仕組み
フォルダの権限リストは下位に伝播します。すべての子ファイルとフォルダは、親から権限を継承します。権限または階層が変更されるたびに、すべてのネストされたフォルダで再帰的に伝播が行われます。たとえば、フォルダ内にファイルが存在し、そのフォルダが別のフォルダ内に移動された場合、新しいフォルダの権限がファイルに伝播されます。新しいフォルダでファイル ユーザーに「編集者」などの新しいロールが付与されると、古いロールはオーバーライドされます。
逆に、ファイルがフォルダから role=writer を継承し、「閲覧者」ロールを提供する別のフォルダに移動されると、ファイルは role=reader を継承するようになります。
共有ドライブ内のファイルやフォルダから継承された権限を削除することはできません。代わりに、これらの権限は、継承元の直接または間接的な親で調整する必要があります。継承された権限は、[マイドライブ] または [共有アイテム] のアイテムから削除できます。
逆に、マイドライブのファイルやフォルダでは、継承された権限をオーバーライドできます。したがって、ファイルがマイドライブ フォルダから role=writer を継承している場合は、ファイルに role=reader を設定して権限レベルを下げることができます。
同じファイルに対する権限オペレーションの同時実行はサポートされていません。最後の更新のみが適用されます。
ファイルの機能を理解する
permissions リソースは、ファイルまたはフォルダに対してアクションを実行する現在のユーザーの権限を最終的に決定するものではありません。代わりに、files リソースには、ファイルまたはフォルダに対してアクションを実行できるかどうかを示すために使用されるブール値の capabilities フィールドのコレクションが含まれています。Google Drive API は、ファイルまたはフォルダに関連付けられている現在のユーザーの permissions リソースに基づいてこれらのフィールドを設定します。
たとえば、Alex がアプリにログインしてファイルを共有しようとすると、Alex のロールに対してファイルの権限がチェックされます。ロールでファイルの共有が許可されている場合、ファイルに関連する capabilities(canShare など)はロールを基準として設定されます。Alex がファイルを共有する場合、アプリは capabilities をチェックして、canShare が true に設定されていることを確認します。
ファイル機能を取得する
アプリがファイルを開くときは、ファイルの機能を確認し、現在のユーザーの権限を反映するように UI をレンダリングする必要があります。たとえば、ユーザーがファイルに対する canComment 権限を持っていない場合、UI でコメント機能が無効になっている必要があります。
機能をチェックするには、fileId パス パラメータと fields パラメータを capabilities フィールドに設定して、files リソースの get メソッドを呼び出します。fields パラメータを使用してフィールドを返す方法については、特定のフィールドを返すをご覧ください。
次のコードサンプルは、ユーザー権限を確認する方法を示しています。レスポンスでは、ユーザーがファイルに対して持つ権限のリストが返されます。各ケーパビリティは、ユーザーが実行できるきめ細かいアクションに対応しています。一部のフィールドは、共有ドライブ内のアイテムにのみ入力されます。
リクエスト
GET https://www.googleapis.com/drive/v3/files/FILE_ID?fields=capabilitiesレスポンス
{ "capabilities": { "canAcceptOwnership": false, "canAddChildren": false, "canAddMyDriveParent": false, "canChangeCopyRequiresWriterPermission": true, "canChangeItemDownloadRestriction": true, "canChangeSecurityUpdateEnabled": false, "canChangeViewersCanCopyContent": true, "canComment": true, "canCopy": true, "canDelete": true, "canDisableInheritedPermissions": false, "canDownload": true, "canEdit": true, "canEnableInheritedPermissions": true, "canListChildren": false, "canModifyContent": true, "canModifyContentRestriction": true, "canModifyEditorContentRestriction": true, "canModifyOwnerContentRestriction": true, "canModifyLabels": true, "canMoveChildrenWithinDrive": false, "canMoveItemIntoTeamDrive": true, "canMoveItemOutOfDrive": true, "canMoveItemWithinDrive": true, "canReadLabels": true, "canReadRevisions": true, "canRemoveChildren": false, "canRemoveContentRestriction": false, "canRemoveMyDriveParent": true, "canRename": true, "canShare": true, "canTrash": true, "canUntrash": true } }
ドライブのリソースを共有するシナリオ
共有シナリオには次の 5 種類があります。
マイドライブ内のファイルを共有するには、
role=writerまたはrole=ownerが必要です。ファイルの
writersCanShareブール値がfalseに設定されている場合、ユーザーはrole=ownerを持っている必要があります。role=writerを持つユーザーが有効期限と時間によって管理される一時的なアクセス権を持っている場合、ファイルを共有することはできません。詳しくは、ファイル アクセスを制限する有効期限を設定するをご覧ください。
マイドライブ内のフォルダを共有するには、
role=writerまたはrole=ownerが必要です。ファイルの
writersCanShareブール値がfalseに設定されている場合、ユーザーはより制限の緩いrole=ownerを持っている必要があります。role=writerが設定されているマイドライブのフォルダでは、一時的なアクセス(有効期限の日付と時刻によって管理される)は許可されません。詳しくは、ファイル アクセスを制限する有効期限を設定するをご覧ください。
共有ドライブ内のファイルを共有するには、
role=writer、role=fileOrganizer、またはrole=organizerの権限が必要です。writersCanShare設定は、共有ドライブ内のアイテムには適用されません。常にtrueに設定されているものとして扱われます。
共有ドライブのフォルダを共有するには、
role=organizerが必要です。- 共有ドライブの
sharingFoldersRequiresOrganizerPermission制限がfalseに設定されている場合、role=fileOrganizerのユーザーはその共有ドライブ内のフォルダを共有できます。
- 共有ドライブの
共有ドライブのメンバーシップを管理するには、
role=organizerが必要です。共有ドライブのメンバーになれるのはユーザーとグループのみです。
fields パラメータを使用する
レスポンスで返すフィールドを指定する場合は、permissions リソースの任意の方法で fields システム パラメータを設定できます。fields パラメータを省略すると、サーバーはメソッドに固有のデフォルトのフィールド セットを返します。たとえば、list メソッドは、各ファイルの id、type、kind、role フィールドのみを返します。別のフィールドを返すには、特定のフィールドを返すをご覧ください。
権限を作成する
権限を作成する際は、次の 2 つのフィールドが必要です。
type:typeは権限スコープ(user、group、domain、anyone)を識別します。type=userの権限は特定のユーザーに適用されますが、type=domainの権限は特定のドメイン内のすべてのユーザーに適用されます。role:roleフィールドは、typeが実行できるオペレーションを識別します。たとえば、type=userとrole=readerの権限を持つユーザーには、ファイルまたはフォルダへの読み取り専用アクセス権が付与されます。また、type=domainとrole=commenterの権限が付与されている場合は、ドメイン内のすべてのユーザーがファイルにコメントを追加できます。ロールと各ロールで許可されるオペレーションの完全なリストについては、ロールと権限をご覧ください。
type=user または type=group を含む権限を作成する場合は、特定のユーザーまたはグループを権限に関連付けるために emailAddress も指定する必要があります。
type=domain の権限を作成する場合は、特定のドメインを権限に関連付けるために domain も指定する必要があります。
権限を作成するには:
- 関連付けられたファイルまたはフォルダの
fileIdパスパラメータを使用して、permissionsリソースでcreateメソッドを使用します。 - リクエストの本文で、
typeとroleを指定します。 type=userまたはtype=groupの場合は、emailAddressを指定します。type=domainの場合は、domainを指定します。
次のコードサンプルは、権限の作成方法を示しています。レスポンスは、割り当てられた permissionId を含む permissions リソースのインスタンスを返します。
リクエスト
POST https://www.googleapis.com/drive/v3/files/FILE_ID/permissions{ "requests": [ { "type": "user", "role": "commenter", "emailAddress": "alex@altostrat.com" } ] }
レスポンス
{
"kind": "drive#permission",
"id": "PERMISSION_ID",
"type": "user",
"role": "commenter"
}対象グループを使用する
対象グループとは、ユーザーにアイテムの共有先として推奨できるグループ(部署やチームなど)のことです。ユーザーに組織全体ではなく一部の限られたユーザー グループとアイテムを共有するよう推奨できます。対象グループを使用すると、データのセキュリティとプライバシーを強化し、ユーザーが適切に共有しやすくなります。詳細については、ターゲット ユーザーについてをご覧ください。
対象グループを使用するには:
Google 管理コンソールで、メニュー アイコン > [ディレクトリ] > [対象グループ] に移動します。
この操作を行うには、特権管理者権限のあるアカウントでログインする必要があります。
[対象グループ] リストで、対象グループの名前をクリックします。対象グループを作成するには、対象グループを作成するをご覧ください。
対象ユーザーの URL(
https://admin.google.com/ac/targetaudiences/ID)から一意の ID をコピーします。type=domainを使用して権限を作成し、domainフィールドをID.audience.googledomains.comに設定します。
ユーザーがターゲット オーディエンスとどのようにやり取りするかを確認するには、リンク共有のユーザー エクスペリエンスをご覧ください。
権限を取得する
権限を取得するには、permissions リソースで get メソッドを使用し、fileId パスパラメータと permissionId パスパラメータを指定します。権限 ID がわからない場合は、list メソッドを使用してすべての権限を一覧表示できます。
次のコードサンプルは、ID で権限を取得する方法を示しています。レスポンスは permissions リソースのインスタンスを返します。
リクエスト
GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissionsPERMISSION_ID
レスポンス
{
"kind": "drive#permissionList",
"permissions": [
{
"kind": "drive#permission",
"id": "PERMISSION_ID",
"type": "user",
"role": "commenter"
}
]
}すべての権限を一覧表示する
ファイル、フォルダ、共有ドライブの権限を一覧表示するには、fileId パス パラメータを使用して permissions リソースで list メソッドを使用します。
次のクエリ パラメータを渡して、権限のページネーションをカスタマイズするか、権限をフィルタします。
pageSize: ページごとに返す権限の最大数。共有ドライブ内のファイルに設定されていない場合、最大 100 件の結果が返されます。共有ドライブにないファイルに対して設定されていない場合、リスト全体が返されます。pageToken: 前回のリスト呼び出しから受け取ったページトークン。後続のページを取得するには、このトークンを指定します。supportsAllDrives: リクエスト元のアプリがマイドライブと共有ドライブの両方をサポートしているかどうか。useDomainAdminAccess: ドメイン管理者としてリクエストを発行するには、trueに設定します。fileIdパラメータが共有ドライブを参照し、リクエスト元が共有ドライブが属するドメインの管理者である場合。詳しくは、ドメイン管理者として共有ドライブを管理するをご覧ください。includePermissionsForView: レスポンスに含める追加ビューの権限。publishedのみがサポートされています。
次のコードサンプルは、すべての権限を取得する方法を示しています。レスポンスは、ファイル、フォルダ、共有ドライブの権限のリストを返します。
リクエスト
GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissionsレスポンス
{
"kind": "drive#permissionList",
"permissions": [
{
"id": "PERMISSION_ID",
"type": "user",
"kind": "drive#permission",
"role": "commenter"
}
]
}権限を更新
ファイルまたはフォルダの権限を更新するには、割り当てられたロールを変更します。ロールのソースの検索の詳細については、ロールのソースを特定するをご覧ください。
permissionsリソースでupdateメソッドを呼び出し、fileIdパス パラメータを関連付けられたファイル、フォルダ、共有ドライブに設定し、permissionIdパス パラメータを変更する権限に設定します。permissionIdを見つけるには、fileIdパスパラメータを指定してpermissionsリソースでlistメソッドを使用します。リクエストで、新しい
roleを指定します。
ユーザーまたはグループがすでにメンバーである場合でも、共有ドライブ内の個々のファイルまたはフォルダに対する権限を付与できます。たとえば、アレックスは共有ドライブのメンバーシップの一部として role=commenter を持っています。ただし、アプリは共有ドライブ内のファイルに対する Alex の role=writer を付与できます。この場合、新しいロールはメンバーシップを通じて付与されたロールよりも権限が大きいため、新しい権限がファイルまたはフォルダの有効なロールになります。
パッチ セマンティクスを使用して更新を適用できます。つまり、リソースの部分的な変更を行うことができます。リクエストで、変更するフィールドを明示的に設定する必要があります。リクエストに含まれていないフィールドは、既存の値が保持されます。詳細については、部分リソースの操作をご覧ください。
次のコードサンプルは、ファイルまたはフォルダの権限を commenter から writer に変更する方法を示しています。レスポンスは permissions リソースのインスタンスを返します。
リクエスト
PATCH https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID
{
"requests": [
{
"role": "writer"
}
]
}レスポンス
{
"kind": "drive#permission",
"id": "PERMISSION_ID",
"type": "user",
"role": "writer"
}ロールソースを特定する
ファイルまたはフォルダのロールを変更するには、ロールのソースを知っている必要があります。共有ドライブの場合、ロールのソースは、共有ドライブのメンバーシップ、フォルダのロール、ファイルのロールに基づいて設定できます。
共有ドライブまたはそのドライブ内のアイテムのロールソースを特定するには、fileId パスパラメータと permissionId パスパラメータ、permissionDetails フィールドに設定された fields パラメータを使用して、permissions リソースの get メソッドを呼び出します。
permissionId を見つけるには、fileId パスパラメータを使用して permissions リソースの list メソッドを使用します。list リクエストで permissionDetails フィールドを取得するには、fields パラメータを permissions/permissionDetails に設定します。
このフィールドには、ユーザー、グループ、ドメインの継承されたファイル権限と直接付与されたファイル権限がすべて列挙されます。
次のコードサンプルは、ロールのソースを特定する方法を示しています。レスポンスは、permissions リソースの permissionDetails を返します。inheritedFrom フィールドには、権限が継承されるアイテムの ID が指定されます。
リクエスト
GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID?fields=permissionDetails&supportsAllDrives=true
レスポンス
{
"permissionDetails": [
{
"permissionType": "member",
"role": "commenter",
"inheritedFrom": "INHERITED_FROM_ID",
"inherited": true
},
{
"permissionType": "file",
"role": "writer",
"inherited": false
}
]
}バッチ リクエストで複数の権限を更新する
複数の権限を変更するには、バッチ リクエストを使用することを強くおすすめします。
次の例は、クライアント ライブラリを使用して権限の一括変更を行う方法を示しています。
Java
Python
Node.js
PHP
.NET
権限を削除する
ファイルまたはフォルダへのアクセスを取り消すには、fileId と permissionId のパスパラメータを設定して権限を削除し、permissions リソースの delete メソッドを呼び出します。
[マイドライブ] 内のアイテムについては、継承された権限を削除できます。継承された権限を削除すると、アイテムと子アイテム(存在する場合)へのアクセス権が取り消されます。
共有ドライブ内のアイテムの場合、継承された権限を取り消すことはできません。代わりに、親ファイルまたはフォルダの権限を更新または削除します。
delete メソッドは、共有ドライブのファイルまたはフォルダに直接適用された権限を削除する場合にも使用されます。
次のコードサンプルは、permissionId を削除してアクセス権を取り消す方法を示しています。成功した場合、レスポンスの本文は空の JSON オブジェクトになります。権限が削除されたことを確認するには、fileId パスパラメータを使用して permissions リソースで list メソッドを使用します。
リクエスト
DELETE https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID
有効期限を設定してファイルへのアクセスを制限する
機密性の高いプロジェクトでユーザーと共同作業している場合、一定期間が経過した後にドライブ内の特定のファイルへのアクセスを制限することが必要になることがあります。マイドライブ内のファイルについては、有効期限を設定してアクセスを制限または削除できます。
有効期限を設定するには:
permissionsリソースでcreateメソッドを使用し、expirationTimeフィールド(およびその他の必須フィールド)を設定します。詳細については、権限を作成するをご覧ください。permissionsリソースでupdateメソッドを使用して、expirationTimeフィールド(およびその他の必須フィールド)を設定します。詳細については、更新権限をご覧ください。
expirationTime フィールドは、RFC 3339 日時を使用して権限の有効期限を示します。有効期限には次の制限があります。
- ユーザーとグループの権限にのみ設定できます。
- 将来の時刻を指定してください。
- 1 年以上先の時間は指定できません。
有効期限について詳しくは、以下の記事をご覧ください。
関連トピック
- 保留中のアクセス候補を管理する
- 制限付きアクセスおよび拡張アクセスを使用するフォルダを管理する
- ファイルのオーナー権限を譲渡する
- Protect file content(ファイル コンテンツを保護する)
- リソースキーを使用してリンク共有された共有ドライブのファイルにアクセスする
- ロールと権限