すべての 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 は、ファイルまたはフォルダに関連付けられている現在のユーザーの権限リソースに基づいて、これらのフィールドを設定します。
たとえば、アレックスがアプリにログインしてファイルを共有しようとすると、アレックスのロールに基づいてファイルに対する権限がチェックされます。ロールでファイルの共有が許可されている場合、ファイルに関連する capabilities
(canShare
など)がロールに関連して入力されます。アレックスがファイルを共有しようとすると、アプリは 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, "canChangeSecurityUpdateEnabled": false, "canComment": true, "canCopy": true, "canDelete": true, "canDownload": true, "canEdit": true, "canListChildren": false, "canModifyContent": true, "canModifyContentRestriction": true, "canModifyLabels": true, "canMoveChildrenWithinDrive": false, "canMoveItemOutOfDrive": true, "canMoveItemWithinDrive": true, "canReadLabels": true, "canReadRevisions": true, "canRemoveChildren": 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 から一意の ID
https://admin.google.com/ac/targetaudiences/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
パスパラメータを使用して permissions
リソースの get()
メソッドを呼び出し、fields
パラメータを permissionDetails
フィールドに設定します。
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 年以上先の日時は指定できません。
有効期限について詳しくは、以下の記事をご覧ください。