Sostituisci il modello del profilo utente in base al gruppo

Sto cercando di creare un componente del tema che sovrascriva il template del profilo utente in base all’appartenenza al gruppo dell’utente visualizzato. Vorrei che i profili degli utenti anonimi non mostrassero affatto l’area #user-content a meno che currentUser non sia staff. Ho creato un gruppo a cui gli utenti anonimi vengono aggiunti automaticamente, ma ho difficoltà a sovrascrivere condizionalmente il template.

Basandomi su Overriding Discourse Templates from a Theme e Adding background videos to certain user profiles ho provato a sovrascrivere user/summary.hbs in questo modo:

<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>

Questo sovrascrive il template per tutti i profili, ma isAnon è undefined, quindi penso di non aver capito come creare la logica per handlebars per controllare quando sovrascrivere invece di aggiungere a un plugin outlet.

registerConnectorClass è corretto da usare per questo? È necessaria una sovrascrittura del template qui? Ho esaminato l’API dei plugin e User.rb e ho capito come verificare se l’utente corrente è in modalità anonima, ma non ho trovato un accesso facile oltre al gruppo per verificare se l’utente visualizzato è anonimo. Ho familiarità con Rails, js e handlebars ma sono nuovo a Ember e Discourse.

1 Mi Piace

Se qualcun altro si imbatte in questo, quello che ho finito per fare è stato sovrascrivere i template per user, user/summary e user/activity aggiungendo {{#if (or viewingSelf currentUser.staff)}} attorno alle sezioni che non volevo che gli utenti registrati vedessero. Questo sovrascrive i template del profilo per tutti gli utenti anziché solo per gli utenti di un gruppo specificato, ma ho deciso che era abbastanza buono per il mio caso d’uso, per dare agli utenti una maggiore privacy generale. Il template che ho elaborato ha ancora permesso agli utenti di scegliere di mettere in evidenza un argomento, ma ha nascosto tutte le altre statistiche di riepilogo, argomenti e attività, tranne quando visualizzati dall’utente stesso e dallo staff.

Il mio caso d’uso è simile a questo argomento sulla modalità anonima per l’uso in classe, in quanto sarebbe bello avere un modo facilmente accessibile per dare agli utenti o agli amministratori un controllo più dettagliato su quali parti del profilo mostrare o nascondere anche per gli utenti registrati. Ad esempio, in un forum di supporto sanitario, sarebbe bello avere account anonimi nel gruppo anon, quindi configurare per non mostrare la pagina o la scheda attività per il gruppo anon.

1 Mi Piace