'Convenience method that provides a quick way to add a canonical user
grant to a bucket. This method retrieves the current ACL, creates a new
grant based on the parameters passed in, adds that grant to the ACL and
then PUTs the new ACL back to GCS.
:type permission: string
:param permission:  The permission being granted.  Should be one of:
(READ|WRITE|FULL_CONTROL)
:type user_id: string
:param user_id:     The canonical user id associated with the GS account
you are granting the permission to.
:type recursive: bool
:param recursive: A boolean value to controls whether the call
will apply the grant to all keys within the bucket
or not.  The default value is False.  By passing a
True value, the call will iterate through all keys
in the bucket and apply the same grant to each key.
CAUTION: If you have a lot of keys, this could take
a long time!'

def add_user_grant(self, permission, user_id, recursive=False, headers=None):

    if (permission not in GSPermissions):
        raise self.connection.provider.storage_permissions_error(('Unknown    Permission:    %s' % permission))
    acl = self.get_acl(headers=headers)
    acl.add_user_grant(permission, user_id)
    self.set_acl(acl, headers=headers)
    if recursive:
        for key in self:
            key.add_user_grant(permission, user_id, headers=headers)
