Llevo varias semanas buscando mi problema en Google y estoy muy cerca de rendirme.
El contexto:
Desarrollo y mantengo un panel de administración multiinquilino para clubes deportivos.
Mi foro de Discourse autoalojado solo está disponible para los miembros de esos clubes. Me gustaría que estuviera abierto al público. Mi propia integración SSO asigna automáticamente el nombre completo de los usuarios desde mi base de datos al usuario de Discourse una vez que han iniciado sesión.
El problema:
Actualmente no puedo hacer que mi foro sea público porque el nombre completo de un usuario solo debe ser visible para los usuarios del mismo club.
Mi experiencia como desarrollador Ruby es nula (soy desarrollador JS), pero hasta ahora he logrado identificar esta parte del código:
# plugin.rb
after_initialize {
require_dependency 'basic_user_serializer'
require_dependency 'current_user'
class ::BasicUserSerializer
attributes :name
def name
# conjunto fijo de nombres de grupos que indican pertenencia a un club
clubGroups = Array['foo', 'bar', 'baz']
# PARTE QUE NO PUEDO RESOLVER:
# Mostrar el nombre del usuario SOLO si comparten uno de los mismos `clubGroups` del usuario actualmente conectado,
# por ejemplo, estoy conectado como un usuario que pertenece al grupo 'bar', lo que significa que pertenezco al club Bar. Debería poder ver los nombres solo de aquellos usuarios que también pertenecen al grupo 'bar'
???
end
end
}
No logro resolver lo siguiente:
cómo obtener los grupos del usuario actual
cómo obtener los grupos del usuario destacado
Una vez que tenga lo anterior, podría comparar los dos arrays con clubGroups y decidir si mostrar o no el nombre del usuario.
Otro desafío para mí será desactivar la posibilidad de editar el propio nombre, pero esa es otra historia.
Al intentar obtener el ID del usuario actual para pasarlo a la consulta, no tengo muy claro cómo hacerlo.
Cuando navego al modelo CurrentUser en el código, el único método que parece relevante para mis necesidades es current_user, pero al ejecutar esto:
pp CurrentUser.current_user
recibo el siguiente error:
undefined method `current_user' for CurrentUser:Module
Creo que me falta algún conocimiento básico sobre Ruby, pero quizás puedas ayudarme a resolverlo fácilmente.
Quizás quieras revisar el código de este plugin. Agrega un distintivo de avatar para personas en los mismos grupos, de modo que puedan reconocerse como miembros del grupo. Es algo diferente, pero sí contiene el código que verifica si el usuario que ve la publicación está en el mismo grupo que el usuario que la publicó.