code: def add_user_grant(self, permission, user_id, recursive=False,
                         headers=None, display_name=None):
          
          if permission not in S3Permissions:
              raise self.connection.provider.storage_permissions_error(
                  'Unknown Permission: %s' % permission)
          policy = self.get_acl(headers=headers)
          policy.acl.add_user_grant(permission, user_id,
                                    display_name=display_name)
          self.set_acl(policy, headers=headers)
          if recursive:
              for key in self:
                  key.add_user_grant(permission, user_id, headers=headers,
                                     display_name=display_name)
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 PUT's the new ACL back to S3.
          
          :type permission: string
          :param permission: The permission being granted. Should be one of:
                             (READ, WRITE, READ_ACP, WRITE_ACP, FULL_CONTROL).
          
          :type user_id: string
          :param user_id:     The canonical user id associated with the AWS
                              account your are granting the permission to.
                              
          :type recursive: boolean
          :param recursive: A boolean value to controls whether the command
                            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!
                            
          :type display_name: string
          :param display_name: An option string containing the user's
                               Display Name.  Only required on Walrus.