Разрешение вложений в группах конфликтует с модерацией постов: команда unhide! завершается ошибкой ActiveRecord::RecordInvalid

Существует конфликт между настройками «Разрешённые группы для постов с встроенными медиа» и процедурой разблокировки постов.

Если пост создан пользователем, который не входит в разрешённые группы для медиа, а затем был скрыт (через жалобы), то при редактировании скрытого поста модератором и добавлении медиа попытка разблокировать пост завершится ошибкой:

ActiveRecord::RecordInvalid
Validation failed: Sorry, you can't embed media items in a post.

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


Шаги для воспроизведения

  1. Настройте Разрешённые группы для постов с встроенными медиа, исключив пользователей с низким уровнем доверия.
  2. Создайте пост с помощью пользователя, не входящего в разрешённые группы.
  3. Скройте пост с помощью системных жалоб. (Не уверен на 100% в этом пункте — кажется, посты можно скрывать только через жалобы, а не вручную персоналом? Персонал может скрывать темы, но не отдельные посты. Поправьте меня, если я ошибаюсь.)
  4. Модератор редактирует скрытый пост и добавляет медиа (изображения/видео).
  5. Попробуйте разблокировать пост (либо через интерфейс, либо через post.unhide! в консоли Rails).
  6. Операция завершится ошибкой:

ActiveRecord::RecordInvalid Validation failed: Sorry, you can't embed media items in a post.

2 лайка

@kris.kotlarek, как ты относишься к

Я считаю, что это безопасно, особенно потому, что существует место вызова, которое всё ещё ожидает валидацию: PostRevisor#remove_flags_and_unhide_post, поэтому дополнительный параметр позволяет нам обеспечить немного большую безопасность.

Тем не менее, эти пути кода очень сложны… поэтому стоит провести тщательную проверку.

2 лайка

Спасибо за сообщение об этой ошибке. Она была исправлена в этом PR:

2 лайка

Эта тема была автоматически закрыта через 3 дня. Новые ответы больше не допускаются.