Запретить пользователям изменять свои полные имена

Всем привет,

На форуме, который мы управляем, мы предоставляем большую свободу в выборе имени пользователя, однако в правилах использования требуется, чтобы пользователи указывали свои полные имена и не меняли их, за исключением случаев изменения имени по юридическим причинам. У нас пока не так много пользователей (менее 250), но уже некоторые начали нарушать это правило. Поэтому нам необходимо обеспечить его соблюдение.

Короче говоря, нам нужно, чтобы полное имя можно было изменить только модератору или администратору после утверждения аккаунта. Есть ли способ реализовать это в Discourse? Я изучил документацию, но ничего не нашёл.

Если нет, можно ли добавить эту функцию в код?

Спасибо

3 лайка

Простое, но предотвратимое решение — скрыть кнопку редактирования с помощью CSS. Хитрые пользователи всё равно смогут её отредактировать. Чтобы гарантировать её сохранность, потребуется плагин или, возможно, SSO.

4 лайка

Спасибо за ответ. Вы знаете, существует ли уже такой плагин? Если нет, я попробую разобраться, как это сделать, но я не писал код уже очень давно :frowning:

2 лайка

Похоже, что плагина не существует, но CSS-решение — это просто «Inspect» из Firefox или Chrome: кликните по элементу, который нужно скрыть, и отредактируйте CSS в теме:

2 лайка

Я считаю, что лучший вариант здесь — использовать внешний провайдер аутентификации (OAuth и т. д.) с опцией «Переопределение имени пользователя через аутентификацию»:

Переопределяет локальное полное имя именем с внешнего сайта при каждом входе и запрещает локальные изменения. Применяется ко всем провайдерам аутентификации.

1 лайк

Это сработает, но с привлечением сторонних сервисов это не лучший вариант для многих из нас, кто готов оставить пользователям выбор их провайдера электронной почты.

Под «внешним» я имею в виду не «сторонний», а «внешний по отношению к Discourse». Вы можете использовать стороннее решение или запустить его самостоятельно.

Доверие к самим себе отличается от доверия к команде разработчиков Discourse — это высококлассные специалисты, которые создали всё это.

Моя мысль в том, что ваше самое надёжное решение — не самое элегантное. Должна быть возможность отключить эту опцию переключателем.

1 лайк

Привет,
Спасибо за предложение, но, к сожалению, в данный момент это невозможно. У нас нет единой системы SSO, а её настройка требует гораздо больше усилий, чем я готов предпринять!

На данный момент, вероятно, я смогу ограничиться лишь вмешательством в CSS. Я управляю форумом клуба, где все участники идентифицированы, и принуждение к этому изменению, несмотря на то что оно просто отключено (и запрещено правилами), станет причиной для перевода аккаунта пользователя в режим только для чтения или его полного отключения.

Спасибо @satonotdead за предоставленные ссылки, я изучу этот материал и посмотрю, смогу ли я легко реализовать это изменение. В долгосрочной перспективе, когда у меня появится время (возможно, мне придётся ждать более 15 лет до выхода на пенсию для этого :sweat_smile:), я могу решить вложить усилия в создание плагина…

2 лайка

Сработало бы гибридное решение, @AriesFR?

Если вы последуете предложению Jay @pfaffman скрыть это с помощью CSS, а затем создадите пользовательское поле и установите настройки так:

:thinking:

2 лайка

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

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

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

[РЕЖИМ ИРОНИИ ВКЛЮЧЕН]
Чуть ли не как отказ разрешить подписи пользователей, потому что это «для их же блага».
[РЕЖИМ ИРОНИИ ВЫКЛЮЧЕН]

Я посмотрел; скрыть поле через API можно, но я не нашёл никаких надёжных данных, чтобы определить, одобрен ли пользователь (в контексте страницы настроек) :thinking:

Вот что у меня есть на данный момент.
Не уверен, стоит ли мне чувствовать себя неловко; возможно, здесь немного «костыльно». :smile:

js
<script type="text/discourse-plugin" version="0.8">

const { setting } = require("discourse/lib/computed");

api.modifyClass("controller:preferences/account", {
  pluginId: "hide-name-in-preferences",

  get canEditName() {
    const enables_name = setting("enable_names");

    if (enables_name && this.isCurrentUser && !this.model.staff) {
      if (this.model.name) {
        // Скрыть только поле ввода (имя отображается)
        this.model.can_edit_name = false;
      } else {
        // Скрыть весь раздел
        return false;
      }
    }

    return enables_name;
  },
});
    
</script>
1 лайк

Это не проблема и не догма. Большинство наших функций приоритизируются исходя из спроса, а спрос на эту функцию был невелик.

9 лайков

Спасибо @Arkshine, это очень похоже на то, что мне нужно. Мне просто нужно разобраться, как внедрить это в мою среду :slight_smile:, но, скорее всего, я смогу это сделать уже к выходным.

Спасибо, я понимаю необходимость приоритизации, хотя глобальный механизм уже существует и, насколько мне известно, многократно запрашивался пользователями. Если патч действительно так прост, как только что предложил Arshkine, то мне кажется, что это было осознанным решением НЕ предоставлять этому полю той же «вежливости», что и остальным.

Не поймите меня неправильно, это замечательный программный продукт, созданный здесь. Насколько я могу судить по форуму, который я помогаю администрировать, он работает безупречно, и я понимаю, насколько это сложно. Я просто не согласен со всеми принятыми решениями и считаю, что некоторые из приведённых оправданий иногда звучат догматично или авторитарно. Это не мешает ему быть лучшим доступным решением на сегодня.

Всего наилучшего

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

В основном разработка продвигается людьми, которые размещаются на CDCK/Discourse.org, так как именно оттуда поступают деньги. Иногда функции добавляются, если многие люди хотят/нуждаются в них, но если эти люди не платят деньги CDCK, их должно быть очень много, либо это должна быть функция, которая, как кажется, понравится многим платящим клиентам. Обратите внимание, я не работаю у них, поэтому это лишь мое наблюдение за последние несколько лет (почти 8 лет).

5 лайков

Действительно! Возможно, стоит отключить настройку enable safe mode, чтобы обычные пользователи не могли её использовать.

3 лайка

О! Я упустил это. Это всё ещё можно обойти с помощью консоли разработчика браузера тем, кто в этом разбирается.

1 лайк

Спасибо, я не заметил этот параметр, теперь он отключён!

1 лайк

Предположение: меня бы не удивило, если бы большинство людей, которые хотят этого и являются платящими клиентами, уже имели какую-либо систему SSO. Таким образом, для всех остальных это становится ещё более нишевой функцией.

3 лайка

Похоже, вы не проверяете подлинность полного имени, которое пользователи указывают при регистрации. Так что если они изменят его с Боба Джонса на Сэма Смита, как вы сможете понять, принадлежит ли имя им?

2 лайка