すべての Google ドライブのファイル、フォルダ、共有ドライブには、権限リソースが関連付けられています。各リソースは、特定の type
(ユーザー、グループ、ドメイン、すべてのユーザー)と role
(「コメント投稿者」や「閲覧者」など)の権限を識別します。たとえば、あるファイルに特定のユーザーに読み取り専用権限(role=reader
)を付与する権限(type=user
)があり、別の権限で特定のグループのメンバー(type=group
)にファイルにコメントを追加する権限(role=commenter
)が含まれている場合があります。
ロールの一覧と、各ロールで許可されるオペレーションについては、ロールと権限をご覧ください。
ドライブ リソースの共有シナリオ
共有のシナリオには次の 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
が必要です。共有ドライブのメンバーになることができるのは、ユーザーとグループのみです。
有効期限を設定してファイルへのアクセスを制限する
機密性の高いプロジェクトで共同作業を行っているときに、一定期間が経過した後に、ドライブ内の特定のファイルに対するアクセスを制限したい場合があります。マイドライブ内のファイルには有効期限を設定し、そのファイルへのアクセス権を制限または削除できます。
有効期限を設定するには:
permissions.create
メソッドを使用して、permissions.expirationTime
フィールド(他の必須フィールド)を設定します。詳しくは、権限を作成するをご覧ください。permissions.update
メソッドを使用して、permissions.expirationTime
フィールド(他の必須フィールド)を設定します。詳細については、権限を変更するをご覧ください。
expirationTime
フィールドは、RFC 3339 日時を使用して権限の有効期限が切れることを示します。有効期限には次の制限があります。
- ユーザーとグループの権限に対してのみ設定できます。
- 時刻は将来の日付にする必要があります。
- 今後 1 年を超える時刻は指定できません。
有効期限について詳しくは、次の記事をご覧ください。
権限の伝播
フォルダの権限リストは下位に伝播され、すべての子ファイルとフォルダは親から権限を継承します。権限または階層が変更されるたびに、ネストされたフォルダすべてにわたって再帰的に伝播が行われます。たとえば、フォルダ内にあるファイルが別のフォルダに移動された場合、新しいフォルダに対する権限がファイルに反映されます。新しいフォルダでファイルのユーザーに新しいロール(ライターなど)が付与されると、古いロールがオーバーライドされます。
逆に、フォルダから role=writer
を継承したファイルを「閲覧者」ロールを持つ別のフォルダに移動した場合、ファイルは role=reader
を継承します。
継承された権限は、共有ドライブ内のファイルやフォルダから削除することはできません。 代わりに、これらの権限は継承元の直接または間接の親で調整する必要があります。継承された権限は、[マイドライブ] または [共有アイテム] のアイテムから削除できます。
逆に、マイドライブ内のファイルやフォルダに対して継承された権限をオーバーライドすることもできます。ファイルがマイドライブ フォルダから role=writer
を継承している場合は、そのファイルに role=reader
を設定して権限レベルを下げることができます。
機能
現在のユーザーがファイルやフォルダに対して実行できる操作を、権限リソースによって最終的に決定するものではありません。代わりに、Files リソースにはブール値のフィールドのコレクションが含まれます。capabilities
ブール値フィールドは、ファイルやフォルダに対して操作が実行できるかどうかを示します。Google Drive API は、ファイルまたはフォルダに関連付けられている現在のユーザーの権限リソースに基づいて、これらのフィールドを設定します。
たとえば、Alex がアプリにログインしてファイルを共有しようとすると、Alex のロールでファイルの権限が確認されます。ロールによってファイルを共有できる場合、そのロールに応じてファイルに関連する capabilities
(canShare
など)が入力されます。Alex がファイルを共有する場合、アプリは capabilities
をチェックして、canShare
が true
に設定されていることを確認します。
ファイル capabilities
の取得例については、ユーザー権限を確認するをご覧ください。
権限を作成する
権限を作成するには、次の 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
を含む 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"
}
]
}
ユーザー権限を確認する
アプリでは、ファイルを開くときにファイルの機能を確認し、現在のユーザーの権限を反映するように UI をレンダリングする必要があります。たとえば、ユーザーがファイルに canComment
機能を持っていない場合は、UI でコメント機能を無効にする必要があります。
capabilities
の詳細については、上記の機能のセクションをご覧ください。
機能を確認するには、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 } }
共有ドライブ内のファイルやフォルダに対する役割の参照元を確認する
ファイルまたはフォルダのロールを変更するには、ロールのソースを把握している必要があります。共有ドライブの場合、ロールの参照元は、共有ドライブのメンバーシップ、フォルダまたはファイルのロールに基づいて決定できます。
共有ドライブのロールの参照元、またはそのドライブ内のアイテムを特定するには、fileId
、permissionId
、fields
の各パラメータを permissionDetails
フィールドに設定して permissions.get
を呼び出します。permissionId
を見つけるには、fileId
を指定して permissions.list
を使用します。permissions.list
リクエストで permissionDetails
フィールドを取得するには、fields
パラメータを permissions/permissionDetails
に設定します。
このフィールドには、ユーザー、グループ、またはドメインで継承されたすべてのファイル権限と直接ファイル権限が列挙されます。
例を表示
次のコードサンプルは、ロールのソースを特定する方法を示しています。レスポンスは、Permission
リソースの 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
}
]
}
権限を変更
ファイルやフォルダの権限を変更するには、割り当てられているロールを変更します。
変更する権限の
permissionId
と、関連するファイル、フォルダ、または共有ドライブのfileId
を指定して、permissions.update
を呼び出します。permissionId
を見つけるには、fileId
を指定してpermissions.list
を使用します。リクエストで、新しい
role
を特定します。
ユーザーまたはグループがすでにメンバーになっている場合でも、共有ドライブ内の個々のファイルまたはフォルダに対する権限を付与できます。たとえば、Alex が共有ドライブのメンバーとして role=commenter
を使用しているとします。ただし、アプリで Alex に、共有ドライブ内のファイルに対する role=writer
を付与することは可能です。この場合、メンバーシップによって付与されるロールよりも新しいロールの方が制限が緩いため、新しい権限がファイルまたはフォルダに対して有効なロールになります。
例を表示
次のコードサンプルは、ファイルまたはフォルダの権限を「コメント投稿者」から「ライター」に変更する方法を示しています。レスポンスは、Permission
リソースのインスタンスを返します。
リクエスト
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
を指定して delete
を呼び出して、権限を削除します。
[マイドライブ] 内のアイテムについては、継承された権限を削除できます。継承された権限を削除すると、アイテムとその子アイテム(ある場合)へのアクセス権が取り消されます。
共有ドライブ内のアイテムについては、継承された権限を取り消すことはできません。代わりに、親ファイルまたは親フォルダの権限を更新または取り消してください。
delete
オペレーションは、共有ドライブのファイルまたはフォルダに直接適用された権限を削除する場合にも使用されます。
例を表示
次のコードサンプルは、permissionId
を削除してアクセス権を取り消す方法を示しています。成功した場合、レスポンスの本文は空です。権限が削除されたことを確認するには、fileId
で permissions.list
を使用します。
リクエスト
DELETE https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions/PERMISSION_ID
ファイルのオーナー権限を同じ組織内の別の Google Workspace アカウントに譲渡する
「マイドライブ」に存在するファイルのオーナー権限は、ある Google Workspace アカウントから同じ組織内の別のアカウントに移行できます。共有ドライブを所有する組織は、共有ドライブ内のファイルを所有します。したがって、共有ドライブ内のファイルやフォルダに対するオーナー権限の移行はサポートされていません。共有ドライブの管理者は、その共有ドライブからアイテムを移動して自身の「マイドライブ」に移動することで、オーナー権限を譲渡できます。
「マイドライブ」内のファイルのオーナー権限を譲渡するには、次のいずれかを行います。
特定のユーザー(
type=user
)にオーナー アクセス権(role=owner
)を付与するファイル権限を作成します。role=owner
で既存のファイルの権限を更新し、指定されたユーザー(transferOwnership=true
)にオーナー権限を譲渡します。
一般ユーザー向けアカウントから別のアカウントにファイルのオーナー権限を移行する
ファイルのオーナー権限は、一般ユーザー向けアカウント間で移行できます。 ただし、新しいオーナー候補が明示的に同意を得るまで、ドライブから 2 つの一般ユーザー向けアカウント間でファイルのオーナー権限を譲渡することはありません。ファイルのオーナー権限を 1 つの一般ユーザー向けアカウントから別の一般ユーザー向けアカウントに譲渡するには、次のようにします。
現在のオーナーがオーナー権限の移行を開始するには、新しいオーナー候補のファイル権限を作成または更新します。権限には、
role=writer
、type=user
、pendingOwner=true
の設定を含める必要があります。新しいオーナーがオーナー候補の権限を作成する場合、ファイルのオーナー候補として招待されることを知らせるメール通知が新しいオーナーに送信されます。新しいオーナーは、ファイル権限を作成または更新して、オーナー権限譲渡リクエストを承認します。権限には、
role=owner
とtransferOwnership=true
の設定を含める必要があります。新しいオーナーが新しい権限を作成すると、オーナー権限が譲渡されたことを示すメール通知が以前のオーナーに送信されます。
ファイルが移管されると、以前のオーナーの役割は writer
にダウングレードされます。
バッチ リクエストを使用して複数の権限を変更する
複数の権限を変更するには、バッチ リクエストを使用することを強くおすすめします。
クライアント ライブラリを使用して権限を一括で変更する例を次に示します。