code: 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)
docs: 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 GS.
          
          :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!