Удаление пользователя через API Discourse

Удаление учетных записей пользователей также возможно через Discourse API.

Например;

DELETE /admin/users/{id}.json HTTP/1.1

Content-Type: application/json
Api-Username: system
Api-Key: 1234*******

{
  "delete_posts": true,
  "block_email": false,
  "block_urls": false,
  "block_ip": false
}

* Запрос упрощен для удобства чтения.

Как видно, параметры тела запроса позволяют удалять созданные пользователем сообщения в рамках того же запроса, в отличие от ручного удаления учетных записей через админ-панель, где сообщения приходится удалять заранее.


Однако при выполнении этого запроса я получаю ошибку 403 (доступ запрещен), несмотря на то, что ключ API имеет глобальную область действия, а пользователь — system:

{
  "errors": ["You are not permitted to view the requested resource."],
  "error_type": "invalid_access"
}

Работает ли это, если изменить значения настроек, упомянутых в руководстве? Значения по умолчанию могут блокировать удаление пользователей. Не уверен на 100%.

Я не уверен в деталях пользователя, которого вы пытаетесь удалить, но ошибка, которую вы видите, скорее всего, возникает из-за того, что не выполняется одно или несколько из следующих условий.

Скорее всего, проблема в блоке else. И да, я согласен, сообщение об ошибке могло бы быть менее расплывчатым :grimacing:.

Точно, @selase! Похоже, у моего пользователя больше постов, чем User::MAX_STAFF_DELETE_POST_COUNT, и к тому же некоторые из них старше, чем SiteSetting.delete_user_max_post_age :slight_smile:

  • delete_user_max_posts: должно было быть переименовано в delete_user_self_max_post_count с момента публикации статьи. По умолчанию установлено в 1.

    Максимальное количество постов, которое может иметь пользователь, чтобы разрешить самостоятельное удаление учётной записи. Установите значение -1, чтобы отключить самостоятельное удаление учётной записи.

  • delete_user_max_post_age установлено в 60 (по умолчанию), и у пользователя есть посты старше 60 дней.

    Не разрешать удаление пользователей, первый пост которых старше (x) дней.

  • delete_all_posts_max установлено в 15 (по умолчанию), а у моего пользователя 12 постов.

    Максимальное количество постов, которое можно удалить за один раз с помощью кнопки «Удалить все посты». Если у пользователя больше постов, чем это значение, все посты нельзя удалить сразу, и пользователя нельзя удалить.

После того как я устранил ограничения, мне удалось удалить своего пользователя через вызов API.

{"deleted":true}

:grin:

И, возможно, в документации API тоже стоит упомянуть это требование, нет?