Я уже несколько недель гуглю свою проблему и почти готов сдаться.
Контекст:
Я разрабатываю и поддерживаю многопользовательскую панель администратора для спортивных клубов.
Мой форум на Discourse, размещенный на собственном хостинге, доступен только членам этих клубов. Я хотел бы сделать его общедоступным. Моя собственная интеграция SSO автоматически присваивает имя пользователя из моей базы данных пользователю Discourse после входа в систему.
Проблема:
Сейчас я не могу сделать свой форум общедоступным, потому что полное имя пользователя должно быть видно только пользователям того же клуба.
Мой опыт разработки на Ruby равен нулю (я разработчик на JS), но пока что я разобрался с этой частью кода:
# plugin.rb
after_initialize {
require_dependency 'basic_user_serializer'
require_dependency 'current_user'
class ::BasicUserSerializer
attributes :name
def name
# фиксированный набор названий групп, указывающих на принадлежность к клубу
clubGroups = Array['foo', 'bar', 'baz']
# ЧАСТЬ, КОТОРУЮ Я НЕ МОГУ РАЗОБРАТЬСЯ:
# Показывать имя пользователя ТОЛЬКО если они принадлежат к одной из тех же `clubGroups`, что и текущий вошедший пользователь,
# например, я вошел как пользователь, принадлежащий к группе 'bar', что означает, что я принадлежу к клубу Bar. Я должен иметь возможность видеть имена только тех пользователей, которые также принадлежат к группе 'bar'
???
end
end
}
Я не могу разобраться в следующих вещах:
как получить группы текущего пользователя
как получить группы пользователя, чье имя отображается
Как только у меня будет это, я смогу сравнить два массива с clubGroups и решить, показывать ли имя пользователя или нет.
Еще одной проблемой для меня будет отключение возможности редактировать свое имя, но это уже другая история.
При попытке получить ID текущего пользователя для передачи в запрос, я не совсем понимаю, как это сделать.
Когда я перехожу к модели CurrentUser в коде, единственный метод, который выглядит подходящим для моих задач, — это current_user, но при выполнении этого:
pp CurrentUser.current_user
я получаю ошибку:
undefined method `current_user' for CurrentUser:Module
Кажется, мне не хватает каких-то базовых знаний о Ruby, но, возможно, вы сможете легко помочь мне это решить?
Возможно, стоит посмотреть код этого плагина. Он добавляет аватар-флер для пользователей из одних и тех же групп, чтобы они могли узнавать друг друга как участников группы. Это немного другая задача, но в коде есть проверка, находится ли просматривающий пользователь в той же группе, что и автор сообщения.