<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="storage_v1beta1.html">Cloud Storage JSON API</a> . <a href="storage_v1beta1.bucketAccessControls.html">bucketAccessControls</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(bucket, entity)</a></code></p>
<p class="firstline">Deletes the ACL entry for the specified entity on the specified bucket.</p>
<p class="toc_element">
  <code><a href="#get">get(bucket, entity)</a></code></p>
<p class="firstline">Returns the ACL entry for the specified entity on the specified bucket.</p>
<p class="toc_element">
  <code><a href="#insert">insert(bucket, body)</a></code></p>
<p class="firstline">Creates a new ACL entry on the specified bucket.</p>
<p class="toc_element">
  <code><a href="#list">list(bucket)</a></code></p>
<p class="firstline">Retrieves ACL entries on the specified bucket.</p>
<p class="toc_element">
  <code><a href="#patch">patch(bucket, entity, body)</a></code></p>
<p class="firstline">Updates an ACL entry on the specified bucket. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(bucket, entity, body)</a></code></p>
<p class="firstline">Updates an ACL entry on the specified bucket.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(bucket, entity)</code>
  <pre>Deletes the ACL entry for the specified entity on the specified bucket.

Args:
  bucket: string, Name of a bucket. (required)
  entity: string, The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(bucket, entity)</code>
  <pre>Returns the ACL entry for the specified entity on the specified bucket.

Args:
  bucket: string, Name of a bucket. (required)
  entity: string, The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers. (required)

Returns:
  An object of the form:

    { # An access-control entry.
      "domain": "A String", # The domain associated with the entity, if any.
      "bucket": "A String", # The name of the bucket.
      "kind": "storage#bucketAccessControl", # The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.
      "id": "A String", # The ID of the access-control entry.
      "role": "A String", # The access permission for the entity. Can be READER, WRITER, or OWNER.
      "entityId": "A String", # The ID for the entity, if any.
      "entity": "A String", # The entity holding the permission, in one of the following forms:
          # - user-userId
          # - user-email
          # - group-groupId
          # - group-email
          # - domain-domain
          # - allUsers
          # - allAuthenticatedUsers Examples:
          # - The user liz@example.com would be user-liz@example.com.
          # - The group example@googlegroups.com would be group-example@googlegroups.com.
          # - To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.
      "email": "A String", # The email address associated with the entity, if any.
      "selfLink": "A String", # The link to this access-control entry.
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(bucket, body)</code>
  <pre>Creates a new ACL entry on the specified bucket.

Args:
  bucket: string, Name of a bucket. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # An access-control entry.
    "domain": "A String", # The domain associated with the entity, if any.
    "bucket": "A String", # The name of the bucket.
    "kind": "storage#bucketAccessControl", # The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.
    "id": "A String", # The ID of the access-control entry.
    "role": "A String", # The access permission for the entity. Can be READER, WRITER, or OWNER.
    "entityId": "A String", # The ID for the entity, if any.
    "entity": "A String", # The entity holding the permission, in one of the following forms:
        # - user-userId
        # - user-email
        # - group-groupId
        # - group-email
        # - domain-domain
        # - allUsers
        # - allAuthenticatedUsers Examples:
        # - The user liz@example.com would be user-liz@example.com.
        # - The group example@googlegroups.com would be group-example@googlegroups.com.
        # - To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.
    "email": "A String", # The email address associated with the entity, if any.
    "selfLink": "A String", # The link to this access-control entry.
  }


Returns:
  An object of the form:

    { # An access-control entry.
      "domain": "A String", # The domain associated with the entity, if any.
      "bucket": "A String", # The name of the bucket.
      "kind": "storage#bucketAccessControl", # The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.
      "id": "A String", # The ID of the access-control entry.
      "role": "A String", # The access permission for the entity. Can be READER, WRITER, or OWNER.
      "entityId": "A String", # The ID for the entity, if any.
      "entity": "A String", # The entity holding the permission, in one of the following forms:
          # - user-userId
          # - user-email
          # - group-groupId
          # - group-email
          # - domain-domain
          # - allUsers
          # - allAuthenticatedUsers Examples:
          # - The user liz@example.com would be user-liz@example.com.
          # - The group example@googlegroups.com would be group-example@googlegroups.com.
          # - To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.
      "email": "A String", # The email address associated with the entity, if any.
      "selfLink": "A String", # The link to this access-control entry.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(bucket)</code>
  <pre>Retrieves ACL entries on the specified bucket.

Args:
  bucket: string, Name of a bucket. (required)

Returns:
  An object of the form:

    { # An access-control list.
    "items": [ # The list of items.
      { # An access-control entry.
          "domain": "A String", # The domain associated with the entity, if any.
          "bucket": "A String", # The name of the bucket.
          "kind": "storage#bucketAccessControl", # The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.
          "id": "A String", # The ID of the access-control entry.
          "role": "A String", # The access permission for the entity. Can be READER, WRITER, or OWNER.
          "entityId": "A String", # The ID for the entity, if any.
          "entity": "A String", # The entity holding the permission, in one of the following forms:
              # - user-userId
              # - user-email
              # - group-groupId
              # - group-email
              # - domain-domain
              # - allUsers
              # - allAuthenticatedUsers Examples:
              # - The user liz@example.com would be user-liz@example.com.
              # - The group example@googlegroups.com would be group-example@googlegroups.com.
              # - To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.
          "email": "A String", # The email address associated with the entity, if any.
          "selfLink": "A String", # The link to this access-control entry.
        },
    ],
    "kind": "storage#bucketAccessControls", # The kind of item this is. For lists of bucket access control entries, this is always storage#bucketAccessControls.
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(bucket, entity, body)</code>
  <pre>Updates an ACL entry on the specified bucket. This method supports patch semantics.

Args:
  bucket: string, Name of a bucket. (required)
  entity: string, The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # An access-control entry.
    "domain": "A String", # The domain associated with the entity, if any.
    "bucket": "A String", # The name of the bucket.
    "kind": "storage#bucketAccessControl", # The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.
    "id": "A String", # The ID of the access-control entry.
    "role": "A String", # The access permission for the entity. Can be READER, WRITER, or OWNER.
    "entityId": "A String", # The ID for the entity, if any.
    "entity": "A String", # The entity holding the permission, in one of the following forms:
        # - user-userId
        # - user-email
        # - group-groupId
        # - group-email
        # - domain-domain
        # - allUsers
        # - allAuthenticatedUsers Examples:
        # - The user liz@example.com would be user-liz@example.com.
        # - The group example@googlegroups.com would be group-example@googlegroups.com.
        # - To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.
    "email": "A String", # The email address associated with the entity, if any.
    "selfLink": "A String", # The link to this access-control entry.
  }


Returns:
  An object of the form:

    { # An access-control entry.
      "domain": "A String", # The domain associated with the entity, if any.
      "bucket": "A String", # The name of the bucket.
      "kind": "storage#bucketAccessControl", # The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.
      "id": "A String", # The ID of the access-control entry.
      "role": "A String", # The access permission for the entity. Can be READER, WRITER, or OWNER.
      "entityId": "A String", # The ID for the entity, if any.
      "entity": "A String", # The entity holding the permission, in one of the following forms:
          # - user-userId
          # - user-email
          # - group-groupId
          # - group-email
          # - domain-domain
          # - allUsers
          # - allAuthenticatedUsers Examples:
          # - The user liz@example.com would be user-liz@example.com.
          # - The group example@googlegroups.com would be group-example@googlegroups.com.
          # - To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.
      "email": "A String", # The email address associated with the entity, if any.
      "selfLink": "A String", # The link to this access-control entry.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(bucket, entity, body)</code>
  <pre>Updates an ACL entry on the specified bucket.

Args:
  bucket: string, Name of a bucket. (required)
  entity: string, The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # An access-control entry.
    "domain": "A String", # The domain associated with the entity, if any.
    "bucket": "A String", # The name of the bucket.
    "kind": "storage#bucketAccessControl", # The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.
    "id": "A String", # The ID of the access-control entry.
    "role": "A String", # The access permission for the entity. Can be READER, WRITER, or OWNER.
    "entityId": "A String", # The ID for the entity, if any.
    "entity": "A String", # The entity holding the permission, in one of the following forms:
        # - user-userId
        # - user-email
        # - group-groupId
        # - group-email
        # - domain-domain
        # - allUsers
        # - allAuthenticatedUsers Examples:
        # - The user liz@example.com would be user-liz@example.com.
        # - The group example@googlegroups.com would be group-example@googlegroups.com.
        # - To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.
    "email": "A String", # The email address associated with the entity, if any.
    "selfLink": "A String", # The link to this access-control entry.
  }


Returns:
  An object of the form:

    { # An access-control entry.
      "domain": "A String", # The domain associated with the entity, if any.
      "bucket": "A String", # The name of the bucket.
      "kind": "storage#bucketAccessControl", # The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.
      "id": "A String", # The ID of the access-control entry.
      "role": "A String", # The access permission for the entity. Can be READER, WRITER, or OWNER.
      "entityId": "A String", # The ID for the entity, if any.
      "entity": "A String", # The entity holding the permission, in one of the following forms:
          # - user-userId
          # - user-email
          # - group-groupId
          # - group-email
          # - domain-domain
          # - allUsers
          # - allAuthenticatedUsers Examples:
          # - The user liz@example.com would be user-liz@example.com.
          # - The group example@googlegroups.com would be group-example@googlegroups.com.
          # - To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.
      "email": "A String", # The email address associated with the entity, if any.
      "selfLink": "A String", # The link to this access-control entry.
    }</pre>
</div>

</body></html>