Je cherche une solution à mon problème sur Google depuis quelques semaines et je suis presque prêt à abandonner.
Contexte :
Je développe et maintiens un panneau d’administration multi-locataires pour des clubs sportifs.
Mon forum Discourse auto-hébergé n’est actuellement accessible qu’aux membres de ces clubs. Je souhaiterais le rendre accessible au public. Ma propre intégration SSO attribue automatiquement le nom complet des utilisateurs depuis ma base de données à l’utilisateur Discourse dès la connexion.
Problème :
Actuellement, je ne peux pas rendre mon forum public car le nom complet d’un utilisateur ne doit être visible que par les utilisateurs du même club.
Je n’ai aucune expérience en Ruby (je suis développeur JS), mais j’ai jusqu’ici identifié cette partie du code :
# plugin.rb
after_initialize {
require_dependency 'basic_user_serializer'
require_dependency 'current_user'
class ::BasicUserSerializer
attributes :name
def name
# ensemble fixe de noms de groupes indiquant l'appartenance à un club
clubGroups = Array['foo', 'bar', 'baz']
# PARTIE QUE JE N'ARRIVE PAS À DÉCRYPTER :
# Afficher le nom de l'utilisateur UNIQUEMENT s'il partage l'un des mêmes `clubGroups` que l'utilisateur actuellement connecté,
# par exemple : je suis connecté en tant qu'utilisateur appartenant au groupe 'bar', ce qui signifie que j'appartiens au club Bar. Je ne devrais pouvoir voir les noms que des utilisateurs appartenant également au groupe 'bar'.
???
end
end
}
Je n’arrive pas à comprendre les points suivants :
Comment récupérer les groupes de l’utilisateur actuel ?
Comment récupérer les groupes de l’utilisateur concerné ?
Une fois ces informations obtenues, je pourrais comparer les deux tableaux avec clubGroups et décider d’afficher ou non le nom de l’utilisateur.
Un autre défi pour moi sera de désactiver la possibilité de modifier son propre nom, mais c’est une autre histoire.
Lorsque j’essaie de récupérer l’ID de l’utilisateur actuel pour le passer à la requête, je ne sais pas vraiment comment faire.
Lorsque je navigue vers le modèle CurrentUser dans le code, la seule méthode qui semble correspondre à mes besoins est current_user, mais quand j’exécute ceci :
pp CurrentUser.current_user
j’obtiens l’erreur suivante :
undefined method `current_user' for CurrentUser:Module
Je pense que je manque clairement de connaissances de base en Ruby ici, mais peut-être pouvez-vous facilement résoudre ce problème pour moi ?
Vous voudrez peut-être examiner le code de ce plugin. Il ajoute un insigne d’avatar pour les personnes appartenant aux mêmes groupes, afin qu’elles puissent se reconnaître en tant que membres du groupe. C’est une fonctionnalité différente, mais le code contient bien la vérification pour déterminer si l’utilisateur qui consulte le message appartient au même groupe que l’utilisateur qui a publié.