Estou pesquisando meu problema no Google há algumas semanas e estou quase desistindo.
O contexto:
Eu desenvolvo e mantenho um painel administrativo multi-tenant para clubes esportivos.
Meu fórum Discourse auto-hospedado está disponível apenas para membros desses clubes. Gostaria que ele estivesse aberto ao público. Minha própria integração SSO atribui automaticamente o nome completo dos usuários do meu banco de dados ao usuário do Discourse assim que eles fazem login.
O problema:
No momento, não consigo tornar meu fórum público porque o nome completo de um usuário deve ser visível apenas para usuários do mesmo clube.
Minha experiência como desenvolvedor Ruby é zero (sou desenvolvedor JS), mas até agora consegui entender esta parte do código:
# plugin.rb
after_initialize {
require_dependency 'basic_user_serializer'
require_dependency 'current_user'
class ::BasicUserSerializer
attributes :name
def name
# conjunto fixo de nomes de grupos que indicam pertencimento a um clube
clubGroups = Array['foo', 'bar', 'baz']
# PARTE QUE NÃO CONSIGO ENTENDER:
# Mostrar o nome do usuário APENAS se eles compartilharem um dos mesmos `clubGroups` do usuário atualmente logado,
# ex: estou logado como um usuário que pertence ao grupo 'bar', o que significa que pertenço ao clube Bar. Deveria ser capaz de ver os nomes apenas daqueles usuários que também pertencem ao grupo 'bar'
???
end
end
}
Não consigo entender as seguintes coisas:
como buscar os grupos do usuário atual
como buscar os grupos do usuário em destaque
Uma vez que eu tenha o acima, poderia comparar os 2 arrays com o clubGroups e decidir se deve mostrar ou não o nome do usuário.
Outro desafio para mim será desativar a possibilidade de editar o próprio nome, mas essa é outra história.
Ao tentar buscar o ID do usuário atual para passar na consulta, não sei muito bem como obtê-lo.
Quando navego até o modelo CurrentUser no código, o único método que parece relevante para meus requisitos é current_user, mas ao fazer isso:
pp CurrentUser.current_user
ele retorna:
undefined method `current_user' for CurrentUser:Module
Acho que estou com certeza perdendo algum conhecimento básico sobre Ruby, mas talvez você possa resolver isso facilmente para mim?
Talvez você queira examinar o código deste plugin. Ele adiciona um distintivo de avatar para pessoas nos mesmos grupos, permitindo que se reconheçam como membros do grupo. Isso é algo diferente, mas contém o código que verifica se o usuário que está visualizando pertence ao mesmo grupo que o usuário que fez a postagem.