Рекурсивная имперсонация

Всем привет,

Я настроил сервер Discourse для клиента и дал ему возможность создать тестовые аккаунты, которые, как я знал, в конечном итоге станут ненужными после внедрения SSO. Я всё настроил, кастомизировал тему и написал описания для всех категорий, используя свой административный аккаунт A.

После настройки DiscourseConnect (как единственного варианта регистрации) я вошёл в систему с помощью своего административного аккаунта из другой системы и предоставил этому аккаунту B права администратора. С этого момента я работал исключительно под аккаунтом B, так как больше не мог войти как A.

Затем я случайно наткнулся на кнопку «Имперсонация» и заинтересовался. Казалось, что мне не нужно удалять аккаунт A, если я смогу просто имперсонировать его для редактирования описаний категорий, FAQ и т. д. Так что я использовал B, чтобы имперсонировать A, провёл несколько тестовых правок, и всё работало отлично.

Пока я не заинтересовался, могу ли я также имперсонировать бота форума. Поэтому, всё ещё находясь в режиме имперсонации A (который, кстати, был администратором), я решил имперсонировать C. Это сработало, отлично, так что я аккуратно вышел из системы и занялся своими делами.

Теперь, когда я вхожу как B, я больше не могу имперсонировать A или C (с другими пользователями всё в порядке). На месте, где должна быть кнопка, просто написано: «Администраторы и модераторы не могут быть удалены».

В логах указано: «B имперсонировал A» и «A имперсонировал C».

Я не был уверен, стоит ли это сообщать как ошибку — поскольку в данный момент я не могу воспроизвести свои действия — или есть простой способ это исправить?

Заранее спасибо,
Фло

Привет, Фло, добро пожаловать в сообщество :waving_hand:t2:

Кнопка «Имперсонация» всё ещё на месте, и я работаю на последней сборке.

Возможно ли войти в учётную запись Admin A, используя /users/admin-login для входа через электронную почту? Это может помочь развязать узел?

Привет, Гэвин,

Как я могу узнать, какая у меня версия, через интерфейс? На панели управления указано, что последнее обновление было 3 августа, но я не вижу номера версии.

Спасибо

Привет, JammyDoger,

Я не знал, что этот маршрут существует! Это, безусловно, решает проблему обхода DiscourseConnect, хотя мне пока не удалось распутать этот узел, так сказать. Кнопки «Принять роль» отображаются для пользователя A, поэтому я предполагаю, что в данный момент он не impersonирует никого?

Вы можете просмотреть исходный код. Его несложно найти.

Перейдите по адресу /u/admin-login и измените email аккаунта администратора на тот, который позволяет вход через SSO. Вы также можете изменить адрес через консоль Rails.

Привет, Джей,

Я просто ошибочно предположил, что если ты намеренно скрываешь информацию от администраторов, то она не будет публичной. Остаётся версия 2.8.0.beta4.

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

Теперь выйдите из аккаунта Admin A, чтобы убедиться, что он сброшен до роли администратора и не выдаёт себя за другого пользователя.

(и также выйдите из аккаунта Admin B, на всякий случай :slightly_smiling_face:)

Привет, JammyDodger,

Да, я вышел из обоих аккаунтов и снова зашёл в B, но безрезультатно :upside_down_face:

Ваш выглядит так?

Вот и всё, что я знаю — мой запас знаний совсем невелик. :slightly_smiling_face: Я не был уверен, могут ли администраторы выдавать себя за других администраторов (мне казалось, что это доступно только разработчикам). Вы убрали Админа B из этого списка?

Надеюсь, кто-то с более глубокими знаниями сможет добавить что-то более существенное. :slightly_smiling_face::crossed_fingers:

Привет, Гэвин,

Нет, я не вижу раздела «Версия».

Значит, ваш аккаунт не является аккаунтом администратора.

Я рекомендую добавить ваш аккаунт B в раздел Dev в файле app.yml, как упомянул @JammyDodger.

  ## TODO: Список email-адресов, разделенных запятыми, которые будут назначены администраторами и разработчиками
  ## при первой регистрации, например 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'gavin@truecode.co.za'

Кажется, вы всё-таки были на правильном пути, спасибо!
Ваш вклад был очень ценен ˆˆ

Сработало, кнопки «Притвориться пользователем» вернулись! Спасибо, Гэвин ˆˆ

Хотя я всё ещё не вижу раздел «Версия» на панели управления, и до сих пор непонятно, почему я вообще мог притвориться кем-то другим.