すべての 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 は、ファイルまたはフォルダに関連付けられた現在のユーザーの権限リソースに基づいて、これらのフィールドを設定します。
たとえば、Alex がアプリにログインしてファイルを共有しようとすると、Alex のロールに対してファイルの権限がチェックされます。ロールでファイルの共有が許可されている場合、ファイルに関連する capabilities
(canShare
など)は、ロールに応じて入力されます。Alex がファイルを共有しようとすると、アプリは capabilities
をチェックして、canShare
が true
に設定されていることを確認します。
ファイル capabilities
を取得する例については、ファイル機能を取得するをご覧ください。
ファイル機能を取得する
アプリがファイルを開くときは、ファイルの機能を確認し、現在のユーザーの権限を反映するように 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
が必要です。共有ドライブのメンバーになれるのはユーザーとグループのみです。
権限を作成する
権限を作成する際は、次の 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
パスパラメータを指定してcreate()
メソッドを使用します。 - リクエストの本文で、
type
とrole
を指定します。 type=user
またはtype=group
の場合は、emailAddress
を指定します。type=domain
の場合は、domain
を指定します。
次のコードサンプルは、権限の作成方法を示しています。レスポンスは、割り当てられた permissionId
を含む Permission
リソースのインスタンスを返します。
リクエスト
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
リソースで list()
メソッドを使用して、ファイル、フォルダ、共有ドライブのすべての権限を取得します。
次のコードサンプルは、すべての権限を取得する方法を示しています。レスポンスは権限のリストを返します。
リクエスト
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()
メソッドを呼び出し、permissionId
パス パラメータを権限の変更に設定し、fileId
パス パラメータを関連付けられたファイル、フォルダ、共有ドライブに設定します。permissionId
を見つけるには、fileId
パスパラメータを使用してpermissions
リソースのlist()
メソッドを使用します。リクエストで、新しい
role
を指定します。
ユーザーまたはグループがすでにメンバーである場合でも、共有ドライブ内の個々のファイルまたはフォルダに対する権限を付与できます。たとえば、アレックスは共有ドライブのメンバーシップの一部として role=commenter
を持っています。ただし、アプリは共有ドライブ内のファイルに対する Alex の role=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
を削除してアクセス権を取り消す方法を示しています。成功すると、レスポンスの本文は空になります。権限が削除されたことを確認するには、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(ファイル コンテンツを保護する)
- リソースキーを使用してリンク共有された共有ドライブのファイルにアクセスする
- ロールと権限