<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;pendingOwner&quot;: True or False, # Whether the account associated with this permission is a pending owner. Only populated for user type permissions for files that are not in a shared drive.
  &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;pendingOwner&quot;: True or False, # Whether the account associated with this permission is a pending owner. Only populated for user type permissions for files that are not in a shared drive.
  &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;pendingOwner&quot;: True or False, # Whether the account associated with this permission is a pending owner. Only populated for user type permissions for files that are not in a shared drive.
  &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;pendingOwner&quot;: True or False, # Whether the account associated with this permission is a pending owner. Only populated for user type permissions for files that are not in a shared drive.
      &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;pendingOwner&quot;: True or False, # Whether the account associated with this permission is a pending owner. Only populated for user type permissions for files that are not in a shared drive.
  &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;pendingOwner&quot;: True or False, # Whether the account associated with this permission is a pending owner. Only populated for user type permissions for files that are not in a shared drive.
  &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>