Substituir modelo de perfil de usuário com base no grupo

Estou tentando criar um componente de tema que substitui o modelo de perfil do usuário com base na associação de grupo do usuário visualizado. Gostaria que os perfis de usuários anônimos não mostrassem a área #user-content de forma alguma, a menos que o currentUser seja um membro da equipe. Criei um grupo ao qual os usuários anônimos são adicionados automaticamente, mas estou tendo problemas para substituir condicionalmente o modelo.

Com base em Substituindo Modelos do Discourse de um Tema e Adicionando vídeos de fundo a certos perfis de usuário, tenho tentado substituir user/summary.hbs assim:

<script type="text/discourse-plugin" version="0.8">
    const TARGET_GROUP = "anon"

  api.registerConnectorClass('above-user-summary-stats', 'user-summary', {
    setupComponent(args, component) {
      const inGroup = [...args.model.groups].filter(g => g.name === TARGET_GROUP)
      const isAnon = inGroup.length ? true : false;
      component.setProperties({isAnon})
    }
  });

</script>

<script type="text/x-handlebars" data-template-name="user/summary">
    <DSection @pageClass="user-summary" @tagName="">
    <div class="user-content" id="user-content">
      <PluginOutlet
        @name="above-user-summary-stats"
        @args={{hash model=this.model user=this.user}}
      />
      {{log isAnon}}
      
    </div>
</DSection>
</script>

Isso substitui o modelo para todos os perfis, mas isAnon é undefined, então acho que não estou entendendo como criar a lógica para o handlebars verificar ao substituir em vez de adicionar a um plugin outlet.

O registerConnectorClass está correto para usar para isso? Uma substituição de modelo é necessária aqui? Percorri a API de plugins e User.rb e descobri como verificar se o usuário atual está no modo anônimo, mas não encontrei nenhum acesso fácil além do grupo para verificar se o usuário visualizado é anônimo. Estou familiarizado com Rails, js e handlebars, mas sou novo no Ember e no Discourse.

1 curtida

Se alguém encontrar isso, o que acabei fazendo foi substituir os templates de user, user/summary e user/activity adicionando {{#if (or viewingSelf currentUser.staff)}} ao redor das seções que eu não queria que usuários logados vissem. Isso substitui os templates de perfil para todos os usuários em vez de apenas usuários de um grupo especificado, mas decidi que era bom o suficiente para o meu caso de uso, para dar aos usuários um pouco mais de privacidade geral. O template que eu desenvolvi ainda permitia que os usuários escolhessem destacar um tópico, mas escondia todas as outras estatísticas de resumo, tópicos e atividades, exceto quando visualizados pelo próprio usuário e pela equipe.

Meu caso de uso é semelhante a este tópico sobre modo anônimo para uso em sala de aula, pois seria bom ter uma maneira facilmente acessível de dar aos usuários ou administradores um controle mais detalhado sobre quais partes do perfil mostrar ou ocultar, mesmo para usuários logados. Por exemplo, em um fórum de apoio à saúde, seria bom ter contas anônimas no grupo anon e, em seguida, configurar para não mostrar a página ou aba de atividade para o grupo anon.

1 curtida