На форуме, который мы управляем, мы предоставляем большую свободу в выборе имени пользователя, однако в правилах использования требуется, чтобы пользователи указывали свои полные имена и не меняли их, за исключением случаев изменения имени по юридическим причинам. У нас пока не так много пользователей (менее 250), но уже некоторые начали нарушать это правило. Поэтому нам необходимо обеспечить его соблюдение.
Короче говоря, нам нужно, чтобы полное имя можно было изменить только модератору или администратору после утверждения аккаунта. Есть ли способ реализовать это в Discourse? Я изучил документацию, но ничего не нашёл.
Простое, но предотвратимое решение — скрыть кнопку редактирования с помощью CSS. Хитрые пользователи всё равно смогут её отредактировать. Чтобы гарантировать её сохранность, потребуется плагин или, возможно, SSO.
Похоже, что плагина не существует, но CSS-решение — это просто «Inspect» из Firefox или Chrome: кликните по элементу, который нужно скрыть, и отредактируйте CSS в теме:
Я считаю, что лучший вариант здесь — использовать внешний провайдер аутентификации (OAuth и т. д.) с опцией «Переопределение имени пользователя через аутентификацию»:
Переопределяет локальное полное имя именем с внешнего сайта при каждом входе и запрещает локальные изменения. Применяется ко всем провайдерам аутентификации.
Это сработает, но с привлечением сторонних сервисов это не лучший вариант для многих из нас, кто готов оставить пользователям выбор их провайдера электронной почты.
Под «внешним» я имею в виду не «сторонний», а «внешний по отношению к Discourse». Вы можете использовать стороннее решение или запустить его самостоятельно.
Привет,
Спасибо за предложение, но, к сожалению, в данный момент это невозможно. У нас нет единой системы SSO, а её настройка требует гораздо больше усилий, чем я готов предпринять!
На данный момент, вероятно, я смогу ограничиться лишь вмешательством в CSS. Я управляю форумом клуба, где все участники идентифицированы, и принуждение к этому изменению, несмотря на то что оно просто отключено (и запрещено правилами), станет причиной для перевода аккаунта пользователя в режим только для чтения или его полного отключения.
Спасибо @satonotdead за предоставленные ссылки, я изучу этот материал и посмотрю, смогу ли я легко реализовать это изменение. В долгосрочной перспективе, когда у меня появится время (возможно, мне придётся ждать более 15 лет до выхода на пенсию для этого ), я могу решить вложить усилия в создание плагина…
Хм, это действительно могло бы сработать, но я всё же хочу, чтобы оно отображалось рядом с именем пользователя, как это сейчас предусмотрено для полного имени.
На данный момент скрытие раздела с полным именем из секции обновления профиля пользователя будет приемлемым временным решением. Я всё ещё могу справляться с исключениями от пользователей, которые слишком любопытны.
Я до сих пор не понимаю, почему наличие этой опции блокировки в базовом продукте, как у нас для имени пользователя, кажется такой проблемой… это выглядит очень догматично.
[РЕЖИМ ИРОНИИ ВКЛЮЧЕН]
Чуть ли не как отказ разрешить подписи пользователей, потому что это «для их же блага».
[РЕЖИМ ИРОНИИ ВЫКЛЮЧЕН]
Я посмотрел; скрыть поле через API можно, но я не нашёл никаких надёжных данных, чтобы определить, одобрен ли пользователь (в контексте страницы настроек)
Вот что у меня есть на данный момент.
Не уверен, стоит ли мне чувствовать себя неловко; возможно, здесь немного «костыльно».
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>
Спасибо @Arkshine, это очень похоже на то, что мне нужно. Мне просто нужно разобраться, как внедрить это в мою среду , но, скорее всего, я смогу это сделать уже к выходным.
Спасибо, я понимаю необходимость приоритизации, хотя глобальный механизм уже существует и, насколько мне известно, многократно запрашивался пользователями. Если патч действительно так прост, как только что предложил Arshkine, то мне кажется, что это было осознанным решением НЕ предоставлять этому полю той же «вежливости», что и остальным.
Не поймите меня неправильно, это замечательный программный продукт, созданный здесь. Насколько я могу судить по форуму, который я помогаю администрировать, он работает безупречно, и я понимаю, насколько это сложно. Я просто не согласен со всеми принятыми решениями и считаю, что некоторые из приведённых оправданий иногда звучат догматично или авторитарно. Это не мешает ему быть лучшим доступным решением на сегодня.
Компонент темы можно обойти, используя безопасный режим или иным образом изменяя что-то в браузере.
В основном разработка продвигается людьми, которые размещаются на CDCK/Discourse.org, так как именно оттуда поступают деньги. Иногда функции добавляются, если многие люди хотят/нуждаются в них, но если эти люди не платят деньги CDCK, их должно быть очень много, либо это должна быть функция, которая, как кажется, понравится многим платящим клиентам. Обратите внимание, я не работаю у них, поэтому это лишь мое наблюдение за последние несколько лет (почти 8 лет).
Предположение: меня бы не удивило, если бы большинство людей, которые хотят этого и являются платящими клиентами, уже имели какую-либо систему SSO. Таким образом, для всех остальных это становится ещё более нишевой функцией.
Похоже, вы не проверяете подлинность полного имени, которое пользователи указывают при регистрации. Так что если они изменят его с Боба Джонса на Сэма Смита, как вы сможете понять, принадлежит ли имя им?