Настройки электронной почты по-прежнему отображаются, когда электронная почта отключена

С точки зрения UX возникает несколько странных ситуаций, когда отправка всех писем отключена.
Я бы классифицировал их как баги.

  1. Уведомление о том, что система не отправляет письма, получают все пользователи, включая тех, кто не является сотрудниками. Похоже, нет способа отключить это уведомление. Я не могу придумать причину, по которой обычные пользователи должны постоянно получать такие оповещения. Возможно, было бы нормально показывать его только сотрудникам или администраторам. Возможно, это было осознанным решением, принятым ранее, но я не смог найти обсуждения по этому вопросу.

из https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/components/global-notice.js#L99

   if (
        this.siteSettings.disable_emails === "yes" ||
        this.siteSettings.disable_emails === "non-staff"
      ) {
        notices.push(
          Notice.create({
            text: I18n.t("emails_are_disabled"), // "Все исходящие письма были глобально отключены администратором. Письменные уведомления любого рода отправляться не будут."
            id: "alert-emails-disabled",
          })
        );
      }

Я считаю, что условие должно быть изменено на:

if (
        this.get("currentUser.staff") && // или currentUser.admin
        (this.siteSettings.disable_emails === "yes" ||
        this.siteSettings.disable_emails === "non-staff") 
      ) {
          …

Или хотя бы добавить настройку, определяющую, кто получает это уведомление (например: все/сотрудники/администраторы/никто).

Также в исправлении по ссылке FIX: Show 'emails disabled' to staff users when disabled for non-staf… · discourse/discourse@acc121f · GitHub идея заключалась в том, что уведомление об отключённых письмах должно показываться только сотрудникам, но тесты по ссылке https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/tests/acceptance/email-notice-test.js#L24 подтверждают, что его видят все.

Кроме того, в мелочах: мне немного непонятны все тесты с заголовком test("when …. Например, тест When enabled фактически проверяет значение disable_emails = "yes". Хотя я понимаю, что тестируется изменение настроек, по сути проверяется отключение писем, и наоборот: When disabled проверяет включение писем. Думаю, они относятся скорее к устанавливаемым значениям, чем к конечному эффекту, что, вероятно, является принятой практикой в проекте. В таком случае всё в порядке, но для новичка это кажется странным.

  1. Независимо от того, установлено ли значение disable_emails в “yes” или “non-staff”, раздел электронной почты всё равно отображается на странице настроек пользователя для всех. Это странно, поскольку внутри шаблона есть проверки, отключающие отдельные части при отключении дайджестов или рассылки.

Как видите, здесь нет проверки: https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/templates/preferences.hbs#L18

    <li class="nav-emails">
      {{#link-to "preferences.emails"}}
        {{i18n "user.preferences_nav.emails"}}
      {{/link-to}}
    </li>

В моей версии я сделал что-то вроде этого (не знаю, так ли вы делаете, кстати). Открыт к предложениям :wink:

      {{#if (show-emails-preferences model siteSettings.disable_emails)}}
          <li class="nav-emails">
            {{#link-to "preferences.emails"}}
              {{i18n "user.preferences_nav.emails"}}
            {{/link-to}}
          </li>
      {{/if}}

где show-emails-preferences определён в хелпере следующим образом:

registerUnbound("show-emails-preferences", (model, disable_emails, args) => {
  let result = true;
  if(disable_emails === 'yes'){
    result = false;
  }else if(disable_emails === 'non-staff'){
    result = model.staff ? true : false;
  }else{
    result = true;
  }
    return result;
});

Дайте знать, если эти предложения кажутся вам полезными улучшениями, и я могу создать pull request.

С уважением,

1 лайк

Я забыл упомянуть, что я также оборачиваю весь шаблон
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/templates/preferences/emails.hbs#L1
в

  {{#if (show-emails-preferences model siteSettings.disable_emails)}}
    {{#unless siteSettings.disable_mailing_list_mode}}
…

Discourse не может работать без электронной почты.

Вы не можете зарегистрировать учётную запись, сбросить пароль, получать уведомления или использовать вход через email. Это обязательный элемент. Этот баннер отображается потому, что он сообщает всем, что сайт не работает.

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

А что, если вы используете только SSO для аутентификации?
Одна из функций Discourse — запретить вход по электронной почте и разрешить SSO как единственную систему аутентификации.
Вы можете установить значения «enable local logins» и «enable local logins via email» в false.
А также установить «disable emails» в «yes».
Возможно, это не будет работать как самостоятельный продукт, но может работать как часть более крупной системы. Кроме того, если бы это было правдой, что «Discourse не может работать без электронной почты», зачем тогда все эти настройки для отключения системы?

«Этот баннер отображается, потому что он сообщает всем, что сайт не работает».
Опять же, я не думаю, что «все» должны об этом знать.
По крайней мере, на мой взгляд, об этом должны знать только сотрудники или администраторы, а не пользователи продукта.

Кстати, именно так мы и используем его. У нас есть основной веб-сайт, где вы выполняете вход/выход, регистрацию, сброс пароля и т. д.
Единственный способ попасть в Discourse — через SSO. Это позволяет нам легко управлять правами доступа через группы.

1 лайк

@pfaffman, отдельно спросить: что вы думаете об этом методе?

Это правильный уровень/способ (говоря языком Discourse) делать вещи?

У меня пока не было много времени, чтобы глубоко изучить код и выделить строгий «стиль Discourse» написания кода.

Да, возможно, вы правы. Я только что столкнулся с экземпляром Discourse, где SSO включено, но при этом отображается баннер «Вход по электронной почте отключен», даже когда я не авторизован.

При использовании SSO не нужно беспокоиться о сбросе пароля, поэтому, кроме уведомлений по электронной почте, которые пользователи не получат, я не понимаю, почему мы ОБЯЗАНЫ показывать этот баннер всем, если включен SSO.

Может быть, хотя бы обновить систему так, чтобы баннер не отображался, если включен SSO и вы не авторизованы?

2 лайка

@blake Лично я считаю, что это уведомление должно показываться только сотрудникам. Обычный пользователь ничего не сможет с этим сделать, разве что создать тему с вопросом, почему он видит это сообщение и что оно означает. Оно просто показывается не тем людям, вот и всё :wink:

Кстати: я скрыл его на своём сайте через CSS, но я вижу смысл в том, чтобы это сообщение отображалось, поэтому это не было бы правильным решением в коде дистрибутива.