<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="drive_v3.html">Drive API</a> . <a href="drive_v3.permissions.html">permissions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(fileId, body=None, emailMessage=None, enforceSingleParent=None, moveToNewOwnersRoot=None, sendNotificationEmail=None, supportsAllDrives=None, supportsTeamDrives=None, transferOwnership=None, useDomainAdminAccess=None)</a></code></p>
<p class="firstline">Creates a permission for a file or shared drive.</p>
<p class="toc_element">
  <code><a href="#delete">delete(fileId, permissionId, supportsAllDrives=None, supportsTeamDrives=None, useDomainAdminAccess=None)</a></code></p>
<p class="firstline">Deletes a permission.</p>
<p class="toc_element">
  <code><a href="#get">get(fileId, permissionId, supportsAllDrives=None, supportsTeamDrives=None, useDomainAdminAccess=None)</a></code></p>
<p class="firstline">Gets a permission by ID.</p>
<p class="toc_element">
  <code><a href="#list">list(fileId, includePermissionsForView=None, pageSize=None, pageToken=None, supportsAllDrives=None, supportsTeamDrives=None, useDomainAdminAccess=None)</a></code></p>
<p class="firstline">Lists a file's or shared drive's permissions.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#update">update(fileId, permissionId, body=None, removeExpiration=None, supportsAllDrives=None, supportsTeamDrives=None, transferOwnership=None, useDomainAdminAccess=None)</a></code></p>
<p class="firstline">Updates a permission with patch semantics.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(fileId, body=None, emailMessage=None, enforceSingleParent=None, moveToNewOwnersRoot=None, sendNotificationEmail=None, supportsAllDrives=None, supportsTeamDrives=None, transferOwnership=None, useDomainAdminAccess=None)</code>
  <pre>Creates a permission for a file or shared drive.

Args:
  fileId: string, The ID of the file or shared drive. (required)
  body: object, The request body.
    The object takes the form of:

{ # A permission for a file. A permission grants a user, group, domain or the world access to a file or a folder hierarchy.
  &quot;allowFileDiscovery&quot;: True or False, # Whether the permission allows the file to be discovered through search. This is only applicable for permissions of type domain or anyone.
  &quot;deleted&quot;: True or False, # Whether the account associated with this permission has been deleted. This field only pertains to user and group permissions.
  &quot;displayName&quot;: &quot;A String&quot;, # The &quot;pretty&quot; name of the value of the permission. The following is a list of examples for each type of permission:
      # - user - User&#x27;s full name, as defined for their Google account, such as &quot;Joe Smith.&quot;
      # - group - Name of the Google Group, such as &quot;The Company Administrators.&quot;
      # - domain - String domain name, such as &quot;thecompany.com.&quot;
      # - anyone - No displayName is present.
  &quot;domain&quot;: &quot;A String&quot;, # The domain to which this permission refers.
  &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user or group to which this permission refers.
  &quot;expirationTime&quot;: &quot;A String&quot;, # The time at which this permission will expire (RFC 3339 date-time). Expiration times have the following restrictions:
      # - They can only be set on user and group permissions
      # - The time must be in the future
      # - The time cannot be more than a year in the future
  &quot;id&quot;: &quot;A String&quot;, # The ID of this permission. This is a unique identifier for the grantee, and is published in User resources as permissionId. IDs should be treated as opaque values.
  &quot;kind&quot;: &quot;drive#permission&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;drive#permission&quot;.
  &quot;permissionDetails&quot;: [ # Details of whether the permissions on this shared drive item are inherited or directly on this item. This is an output-only field which is present only for shared drive items.
    {
      &quot;inherited&quot;: True or False, # Whether this permission is inherited. This field is always populated. This is an output-only field.
      &quot;inheritedFrom&quot;: &quot;A String&quot;, # The ID of the item from which this permission is inherited. This is an output-only field.
      &quot;permissionType&quot;: &quot;A String&quot;, # The permission type for this user. While new values may be added in future, the following are currently possible:
          # - file
          # - member
      &quot;role&quot;: &quot;A String&quot;, # The primary role for this user. While new values may be added in the future, the following are currently possible:
          # - organizer
          # - fileOrganizer
          # - writer
          # - commenter
          # - reader
    },
  ],
  &quot;photoLink&quot;: &quot;A String&quot;, # A link to the user&#x27;s profile photo, if available.
  &quot;role&quot;: &quot;A String&quot;, # The role granted by this permission. While new values may be supported in the future, the following are currently allowed:
      # - owner
      # - organizer
      # - fileOrganizer
      # - writer
      # - commenter
      # - reader
  &quot;teamDrivePermissionDetails&quot;: [ # Deprecated - use permissionDetails instead.
    {
      &quot;inherited&quot;: True or False, # Deprecated - use permissionDetails/inherited instead.
      &quot;inheritedFrom&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/inheritedFrom instead.
      &quot;role&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/role instead.
      &quot;teamDrivePermissionType&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/permissionType instead.
    },
  ],
  &quot;type&quot;: &quot;A String&quot;, # The type of the grantee. Valid values are:
      # - user
      # - group
      # - domain
      # - anyone  When creating a permission, if type is user or group, you must provide an emailAddress for the user or group. When type is domain, you must provide a domain. There isn&#x27;t extra information required for a anyone type.
  &quot;view&quot;: &quot;A String&quot;, # Indicates the view for this permission. Only populated for permissions that belong to a view. published is the only supported value.
}

  emailMessage: string, A plain text custom message to include in the notification email.
  enforceSingleParent: boolean, Deprecated. See moveToNewOwnersRoot for details.
  moveToNewOwnersRoot: boolean, This parameter will only take effect if the item is not in a shared drive and the request is attempting to transfer the ownership of the item. If set to true, the item will be moved to the new owner&#x27;s My Drive root folder and all prior parents removed. If set to false, parents are not changed.
  sendNotificationEmail: boolean, Whether to send a notification email when sharing to users or groups. This defaults to true for users and groups, and is not allowed for other requests. It must not be disabled for ownership transfers.
  supportsAllDrives: boolean, Whether the requesting application supports both My Drives and shared drives.
  supportsTeamDrives: boolean, Deprecated use supportsAllDrives instead.
  transferOwnership: boolean, Whether to transfer ownership to the specified user and downgrade the current owner to a writer. This parameter is required as an acknowledgement of the side effect. File owners can only transfer ownership of files existing on My Drive. Files existing in a shared drive are owned by the organization that owns that shared drive. Ownership transfers are not supported for files and folders in shared drives. Organizers of a shared drive can move items from that shared drive into their My Drive which transfers the ownership to them.
  useDomainAdminAccess: boolean, Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.

Returns:
  An object of the form:

    { # A permission for a file. A permission grants a user, group, domain or the world access to a file or a folder hierarchy.
  &quot;allowFileDiscovery&quot;: True or False, # Whether the permission allows the file to be discovered through search. This is only applicable for permissions of type domain or anyone.
  &quot;deleted&quot;: True or False, # Whether the account associated with this permission has been deleted. This field only pertains to user and group permissions.
  &quot;displayName&quot;: &quot;A String&quot;, # The &quot;pretty&quot; name of the value of the permission. The following is a list of examples for each type of permission:
      # - user - User&#x27;s full name, as defined for their Google account, such as &quot;Joe Smith.&quot;
      # - group - Name of the Google Group, such as &quot;The Company Administrators.&quot;
      # - domain - String domain name, such as &quot;thecompany.com.&quot;
      # - anyone - No displayName is present.
  &quot;domain&quot;: &quot;A String&quot;, # The domain to which this permission refers.
  &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user or group to which this permission refers.
  &quot;expirationTime&quot;: &quot;A String&quot;, # The time at which this permission will expire (RFC 3339 date-time). Expiration times have the following restrictions:
      # - They can only be set on user and group permissions
      # - The time must be in the future
      # - The time cannot be more than a year in the future
  &quot;id&quot;: &quot;A String&quot;, # The ID of this permission. This is a unique identifier for the grantee, and is published in User resources as permissionId. IDs should be treated as opaque values.
  &quot;kind&quot;: &quot;drive#permission&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;drive#permission&quot;.
  &quot;permissionDetails&quot;: [ # Details of whether the permissions on this shared drive item are inherited or directly on this item. This is an output-only field which is present only for shared drive items.
    {
      &quot;inherited&quot;: True or False, # Whether this permission is inherited. This field is always populated. This is an output-only field.
      &quot;inheritedFrom&quot;: &quot;A String&quot;, # The ID of the item from which this permission is inherited. This is an output-only field.
      &quot;permissionType&quot;: &quot;A String&quot;, # The permission type for this user. While new values may be added in future, the following are currently possible:
          # - file
          # - member
      &quot;role&quot;: &quot;A String&quot;, # The primary role for this user. While new values may be added in the future, the following are currently possible:
          # - organizer
          # - fileOrganizer
          # - writer
          # - commenter
          # - reader
    },
  ],
  &quot;photoLink&quot;: &quot;A String&quot;, # A link to the user&#x27;s profile photo, if available.
  &quot;role&quot;: &quot;A String&quot;, # The role granted by this permission. While new values may be supported in the future, the following are currently allowed:
      # - owner
      # - organizer
      # - fileOrganizer
      # - writer
      # - commenter
      # - reader
  &quot;teamDrivePermissionDetails&quot;: [ # Deprecated - use permissionDetails instead.
    {
      &quot;inherited&quot;: True or False, # Deprecated - use permissionDetails/inherited instead.
      &quot;inheritedFrom&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/inheritedFrom instead.
      &quot;role&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/role instead.
      &quot;teamDrivePermissionType&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/permissionType instead.
    },
  ],
  &quot;type&quot;: &quot;A String&quot;, # The type of the grantee. Valid values are:
      # - user
      # - group
      # - domain
      # - anyone  When creating a permission, if type is user or group, you must provide an emailAddress for the user or group. When type is domain, you must provide a domain. There isn&#x27;t extra information required for a anyone type.
  &quot;view&quot;: &quot;A String&quot;, # Indicates the view for this permission. Only populated for permissions that belong to a view. published is the only supported value.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(fileId, permissionId, supportsAllDrives=None, supportsTeamDrives=None, useDomainAdminAccess=None)</code>
  <pre>Deletes a permission.

Args:
  fileId: string, The ID of the file or shared drive. (required)
  permissionId: string, The ID of the permission. (required)
  supportsAllDrives: boolean, Whether the requesting application supports both My Drives and shared drives.
  supportsTeamDrives: boolean, Deprecated use supportsAllDrives instead.
  useDomainAdminAccess: boolean, Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(fileId, permissionId, supportsAllDrives=None, supportsTeamDrives=None, useDomainAdminAccess=None)</code>
  <pre>Gets a permission by ID.

Args:
  fileId: string, The ID of the file. (required)
  permissionId: string, The ID of the permission. (required)
  supportsAllDrives: boolean, Whether the requesting application supports both My Drives and shared drives.
  supportsTeamDrives: boolean, Deprecated use supportsAllDrives instead.
  useDomainAdminAccess: boolean, Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.

Returns:
  An object of the form:

    { # A permission for a file. A permission grants a user, group, domain or the world access to a file or a folder hierarchy.
  &quot;allowFileDiscovery&quot;: True or False, # Whether the permission allows the file to be discovered through search. This is only applicable for permissions of type domain or anyone.
  &quot;deleted&quot;: True or False, # Whether the account associated with this permission has been deleted. This field only pertains to user and group permissions.
  &quot;displayName&quot;: &quot;A String&quot;, # The &quot;pretty&quot; name of the value of the permission. The following is a list of examples for each type of permission:
      # - user - User&#x27;s full name, as defined for their Google account, such as &quot;Joe Smith.&quot;
      # - group - Name of the Google Group, such as &quot;The Company Administrators.&quot;
      # - domain - String domain name, such as &quot;thecompany.com.&quot;
      # - anyone - No displayName is present.
  &quot;domain&quot;: &quot;A String&quot;, # The domain to which this permission refers.
  &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user or group to which this permission refers.
  &quot;expirationTime&quot;: &quot;A String&quot;, # The time at which this permission will expire (RFC 3339 date-time). Expiration times have the following restrictions:
      # - They can only be set on user and group permissions
      # - The time must be in the future
      # - The time cannot be more than a year in the future
  &quot;id&quot;: &quot;A String&quot;, # The ID of this permission. This is a unique identifier for the grantee, and is published in User resources as permissionId. IDs should be treated as opaque values.
  &quot;kind&quot;: &quot;drive#permission&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;drive#permission&quot;.
  &quot;permissionDetails&quot;: [ # Details of whether the permissions on this shared drive item are inherited or directly on this item. This is an output-only field which is present only for shared drive items.
    {
      &quot;inherited&quot;: True or False, # Whether this permission is inherited. This field is always populated. This is an output-only field.
      &quot;inheritedFrom&quot;: &quot;A String&quot;, # The ID of the item from which this permission is inherited. This is an output-only field.
      &quot;permissionType&quot;: &quot;A String&quot;, # The permission type for this user. While new values may be added in future, the following are currently possible:
          # - file
          # - member
      &quot;role&quot;: &quot;A String&quot;, # The primary role for this user. While new values may be added in the future, the following are currently possible:
          # - organizer
          # - fileOrganizer
          # - writer
          # - commenter
          # - reader
    },
  ],
  &quot;photoLink&quot;: &quot;A String&quot;, # A link to the user&#x27;s profile photo, if available.
  &quot;role&quot;: &quot;A String&quot;, # The role granted by this permission. While new values may be supported in the future, the following are currently allowed:
      # - owner
      # - organizer
      # - fileOrganizer
      # - writer
      # - commenter
      # - reader
  &quot;teamDrivePermissionDetails&quot;: [ # Deprecated - use permissionDetails instead.
    {
      &quot;inherited&quot;: True or False, # Deprecated - use permissionDetails/inherited instead.
      &quot;inheritedFrom&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/inheritedFrom instead.
      &quot;role&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/role instead.
      &quot;teamDrivePermissionType&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/permissionType instead.
    },
  ],
  &quot;type&quot;: &quot;A String&quot;, # The type of the grantee. Valid values are:
      # - user
      # - group
      # - domain
      # - anyone  When creating a permission, if type is user or group, you must provide an emailAddress for the user or group. When type is domain, you must provide a domain. There isn&#x27;t extra information required for a anyone type.
  &quot;view&quot;: &quot;A String&quot;, # Indicates the view for this permission. Only populated for permissions that belong to a view. published is the only supported value.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(fileId, includePermissionsForView=None, pageSize=None, pageToken=None, supportsAllDrives=None, supportsTeamDrives=None, useDomainAdminAccess=None)</code>
  <pre>Lists a file&#x27;s or shared drive&#x27;s permissions.

Args:
  fileId: string, The ID of the file or shared drive. (required)
  includePermissionsForView: string, Specifies which additional view&#x27;s permissions to include in the response. Only &#x27;published&#x27; is supported.
  pageSize: integer, The maximum number of permissions to return per page. When not set for files in a shared drive, at most 100 results will be returned. When not set for files that are not in a shared drive, the entire list will be returned.
  pageToken: string, The token for continuing a previous list request on the next page. This should be set to the value of &#x27;nextPageToken&#x27; from the previous response.
  supportsAllDrives: boolean, Whether the requesting application supports both My Drives and shared drives.
  supportsTeamDrives: boolean, Deprecated use supportsAllDrives instead.
  useDomainAdminAccess: boolean, Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.

Returns:
  An object of the form:

    { # A list of permissions for a file.
  &quot;kind&quot;: &quot;drive#permissionList&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;drive#permissionList&quot;.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The page token for the next page of permissions. This field will be absent if the end of the permissions list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.
  &quot;permissions&quot;: [ # The list of permissions. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.
    { # A permission for a file. A permission grants a user, group, domain or the world access to a file or a folder hierarchy.
      &quot;allowFileDiscovery&quot;: True or False, # Whether the permission allows the file to be discovered through search. This is only applicable for permissions of type domain or anyone.
      &quot;deleted&quot;: True or False, # Whether the account associated with this permission has been deleted. This field only pertains to user and group permissions.
      &quot;displayName&quot;: &quot;A String&quot;, # The &quot;pretty&quot; name of the value of the permission. The following is a list of examples for each type of permission:
          # - user - User&#x27;s full name, as defined for their Google account, such as &quot;Joe Smith.&quot;
          # - group - Name of the Google Group, such as &quot;The Company Administrators.&quot;
          # - domain - String domain name, such as &quot;thecompany.com.&quot;
          # - anyone - No displayName is present.
      &quot;domain&quot;: &quot;A String&quot;, # The domain to which this permission refers.
      &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user or group to which this permission refers.
      &quot;expirationTime&quot;: &quot;A String&quot;, # The time at which this permission will expire (RFC 3339 date-time). Expiration times have the following restrictions:
          # - They can only be set on user and group permissions
          # - The time must be in the future
          # - The time cannot be more than a year in the future
      &quot;id&quot;: &quot;A String&quot;, # The ID of this permission. This is a unique identifier for the grantee, and is published in User resources as permissionId. IDs should be treated as opaque values.
      &quot;kind&quot;: &quot;drive#permission&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;drive#permission&quot;.
      &quot;permissionDetails&quot;: [ # Details of whether the permissions on this shared drive item are inherited or directly on this item. This is an output-only field which is present only for shared drive items.
        {
          &quot;inherited&quot;: True or False, # Whether this permission is inherited. This field is always populated. This is an output-only field.
          &quot;inheritedFrom&quot;: &quot;A String&quot;, # The ID of the item from which this permission is inherited. This is an output-only field.
          &quot;permissionType&quot;: &quot;A String&quot;, # The permission type for this user. While new values may be added in future, the following are currently possible:
              # - file
              # - member
          &quot;role&quot;: &quot;A String&quot;, # The primary role for this user. While new values may be added in the future, the following are currently possible:
              # - organizer
              # - fileOrganizer
              # - writer
              # - commenter
              # - reader
        },
      ],
      &quot;photoLink&quot;: &quot;A String&quot;, # A link to the user&#x27;s profile photo, if available.
      &quot;role&quot;: &quot;A String&quot;, # The role granted by this permission. While new values may be supported in the future, the following are currently allowed:
          # - owner
          # - organizer
          # - fileOrganizer
          # - writer
          # - commenter
          # - reader
      &quot;teamDrivePermissionDetails&quot;: [ # Deprecated - use permissionDetails instead.
        {
          &quot;inherited&quot;: True or False, # Deprecated - use permissionDetails/inherited instead.
          &quot;inheritedFrom&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/inheritedFrom instead.
          &quot;role&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/role instead.
          &quot;teamDrivePermissionType&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/permissionType instead.
        },
      ],
      &quot;type&quot;: &quot;A String&quot;, # The type of the grantee. Valid values are:
          # - user
          # - group
          # - domain
          # - anyone  When creating a permission, if type is user or group, you must provide an emailAddress for the user or group. When type is domain, you must provide a domain. There isn&#x27;t extra information required for a anyone type.
      &quot;view&quot;: &quot;A String&quot;, # Indicates the view for this permission. Only populated for permissions that belong to a view. published is the only supported value.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="update">update(fileId, permissionId, body=None, removeExpiration=None, supportsAllDrives=None, supportsTeamDrives=None, transferOwnership=None, useDomainAdminAccess=None)</code>
  <pre>Updates a permission with patch semantics.

Args:
  fileId: string, The ID of the file or shared drive. (required)
  permissionId: string, The ID of the permission. (required)
  body: object, The request body.
    The object takes the form of:

{ # A permission for a file. A permission grants a user, group, domain or the world access to a file or a folder hierarchy.
  &quot;allowFileDiscovery&quot;: True or False, # Whether the permission allows the file to be discovered through search. This is only applicable for permissions of type domain or anyone.
  &quot;deleted&quot;: True or False, # Whether the account associated with this permission has been deleted. This field only pertains to user and group permissions.
  &quot;displayName&quot;: &quot;A String&quot;, # The &quot;pretty&quot; name of the value of the permission. The following is a list of examples for each type of permission:
      # - user - User&#x27;s full name, as defined for their Google account, such as &quot;Joe Smith.&quot;
      # - group - Name of the Google Group, such as &quot;The Company Administrators.&quot;
      # - domain - String domain name, such as &quot;thecompany.com.&quot;
      # - anyone - No displayName is present.
  &quot;domain&quot;: &quot;A String&quot;, # The domain to which this permission refers.
  &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user or group to which this permission refers.
  &quot;expirationTime&quot;: &quot;A String&quot;, # The time at which this permission will expire (RFC 3339 date-time). Expiration times have the following restrictions:
      # - They can only be set on user and group permissions
      # - The time must be in the future
      # - The time cannot be more than a year in the future
  &quot;id&quot;: &quot;A String&quot;, # The ID of this permission. This is a unique identifier for the grantee, and is published in User resources as permissionId. IDs should be treated as opaque values.
  &quot;kind&quot;: &quot;drive#permission&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;drive#permission&quot;.
  &quot;permissionDetails&quot;: [ # Details of whether the permissions on this shared drive item are inherited or directly on this item. This is an output-only field which is present only for shared drive items.
    {
      &quot;inherited&quot;: True or False, # Whether this permission is inherited. This field is always populated. This is an output-only field.
      &quot;inheritedFrom&quot;: &quot;A String&quot;, # The ID of the item from which this permission is inherited. This is an output-only field.
      &quot;permissionType&quot;: &quot;A String&quot;, # The permission type for this user. While new values may be added in future, the following are currently possible:
          # - file
          # - member
      &quot;role&quot;: &quot;A String&quot;, # The primary role for this user. While new values may be added in the future, the following are currently possible:
          # - organizer
          # - fileOrganizer
          # - writer
          # - commenter
          # - reader
    },
  ],
  &quot;photoLink&quot;: &quot;A String&quot;, # A link to the user&#x27;s profile photo, if available.
  &quot;role&quot;: &quot;A String&quot;, # The role granted by this permission. While new values may be supported in the future, the following are currently allowed:
      # - owner
      # - organizer
      # - fileOrganizer
      # - writer
      # - commenter
      # - reader
  &quot;teamDrivePermissionDetails&quot;: [ # Deprecated - use permissionDetails instead.
    {
      &quot;inherited&quot;: True or False, # Deprecated - use permissionDetails/inherited instead.
      &quot;inheritedFrom&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/inheritedFrom instead.
      &quot;role&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/role instead.
      &quot;teamDrivePermissionType&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/permissionType instead.
    },
  ],
  &quot;type&quot;: &quot;A String&quot;, # The type of the grantee. Valid values are:
      # - user
      # - group
      # - domain
      # - anyone  When creating a permission, if type is user or group, you must provide an emailAddress for the user or group. When type is domain, you must provide a domain. There isn&#x27;t extra information required for a anyone type.
  &quot;view&quot;: &quot;A String&quot;, # Indicates the view for this permission. Only populated for permissions that belong to a view. published is the only supported value.
}

  removeExpiration: boolean, Whether to remove the expiration date.
  supportsAllDrives: boolean, Whether the requesting application supports both My Drives and shared drives.
  supportsTeamDrives: boolean, Deprecated use supportsAllDrives instead.
  transferOwnership: boolean, Whether to transfer ownership to the specified user and downgrade the current owner to a writer. This parameter is required as an acknowledgement of the side effect. File owners can only transfer ownership of files existing on My Drive. Files existing in a shared drive are owned by the organization that owns that shared drive. Ownership transfers are not supported for files and folders in shared drives. Organizers of a shared drive can move items from that shared drive into their My Drive which transfers the ownership to them.
  useDomainAdminAccess: boolean, Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.

Returns:
  An object of the form:

    { # A permission for a file. A permission grants a user, group, domain or the world access to a file or a folder hierarchy.
  &quot;allowFileDiscovery&quot;: True or False, # Whether the permission allows the file to be discovered through search. This is only applicable for permissions of type domain or anyone.
  &quot;deleted&quot;: True or False, # Whether the account associated with this permission has been deleted. This field only pertains to user and group permissions.
  &quot;displayName&quot;: &quot;A String&quot;, # The &quot;pretty&quot; name of the value of the permission. The following is a list of examples for each type of permission:
      # - user - User&#x27;s full name, as defined for their Google account, such as &quot;Joe Smith.&quot;
      # - group - Name of the Google Group, such as &quot;The Company Administrators.&quot;
      # - domain - String domain name, such as &quot;thecompany.com.&quot;
      # - anyone - No displayName is present.
  &quot;domain&quot;: &quot;A String&quot;, # The domain to which this permission refers.
  &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user or group to which this permission refers.
  &quot;expirationTime&quot;: &quot;A String&quot;, # The time at which this permission will expire (RFC 3339 date-time). Expiration times have the following restrictions:
      # - They can only be set on user and group permissions
      # - The time must be in the future
      # - The time cannot be more than a year in the future
  &quot;id&quot;: &quot;A String&quot;, # The ID of this permission. This is a unique identifier for the grantee, and is published in User resources as permissionId. IDs should be treated as opaque values.
  &quot;kind&quot;: &quot;drive#permission&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;drive#permission&quot;.
  &quot;permissionDetails&quot;: [ # Details of whether the permissions on this shared drive item are inherited or directly on this item. This is an output-only field which is present only for shared drive items.
    {
      &quot;inherited&quot;: True or False, # Whether this permission is inherited. This field is always populated. This is an output-only field.
      &quot;inheritedFrom&quot;: &quot;A String&quot;, # The ID of the item from which this permission is inherited. This is an output-only field.
      &quot;permissionType&quot;: &quot;A String&quot;, # The permission type for this user. While new values may be added in future, the following are currently possible:
          # - file
          # - member
      &quot;role&quot;: &quot;A String&quot;, # The primary role for this user. While new values may be added in the future, the following are currently possible:
          # - organizer
          # - fileOrganizer
          # - writer
          # - commenter
          # - reader
    },
  ],
  &quot;photoLink&quot;: &quot;A String&quot;, # A link to the user&#x27;s profile photo, if available.
  &quot;role&quot;: &quot;A String&quot;, # The role granted by this permission. While new values may be supported in the future, the following are currently allowed:
      # - owner
      # - organizer
      # - fileOrganizer
      # - writer
      # - commenter
      # - reader
  &quot;teamDrivePermissionDetails&quot;: [ # Deprecated - use permissionDetails instead.
    {
      &quot;inherited&quot;: True or False, # Deprecated - use permissionDetails/inherited instead.
      &quot;inheritedFrom&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/inheritedFrom instead.
      &quot;role&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/role instead.
      &quot;teamDrivePermissionType&quot;: &quot;A String&quot;, # Deprecated - use permissionDetails/permissionType instead.
    },
  ],
  &quot;type&quot;: &quot;A String&quot;, # The type of the grantee. Valid values are:
      # - user
      # - group
      # - domain
      # - anyone  When creating a permission, if type is user or group, you must provide an emailAddress for the user or group. When type is domain, you must provide a domain. There isn&#x27;t extra information required for a anyone type.
  &quot;view&quot;: &quot;A String&quot;, # Indicates the view for this permission. Only populated for permissions that belong to a view. published is the only supported value.
}</pre>
</div>

</body></html>