docs: def permission_factory(obj, action):
      """Get default permission factory.
  
      :param obj: An instance of :class:`invenio_files_rest.models.Bucket` or
          :class:`invenio_files_rest.models.ObjectVersion` or
          :class:`invenio_files_rest.models.MultipartObject` or ``None`` if
          the action is global.
      :param action: The required action.
      :raises RuntimeError: If the object is unknown.
      :returns: A :class:`invenio_access.permissions.Permission` instance.
      """
      need_class = _action2need_map[action]
  
      if obj is None:
          return Permission(need_class(None))
  
      arg = None
      if isinstance(obj, Bucket):
          arg = str(obj.id)
      elif isinstance(obj, ObjectVersion):
          arg = str(obj.bucket_id)
      elif isinstance(obj, MultipartObject):
          arg = str(obj.bucket_id)
      else:
          raise RuntimeError('Unknown object')
  
      return Permission(need_class(arg))