È facile usare categorie e sottocategorie per consentire agli utenti di visualizzarle in base alla logica “OR” - cioè, se un utente è nel Gruppo X o nel Gruppo Y, allora può vedere la categoria o la sottocategoria.
È possibile utilizzare efficacemente la logica “AND”, in modo che un utente debba essere sia nel Gruppo X CHE nel Gruppo Y per poter vedere una categoria / sottocategoria?
Il nostro caso d’uso è che abbiamo tre livelli di accesso. È più facile pensarli come studenti del primo anno, studenti del secondo anno e studenti del terzo anno. Il primo anno può vedere solo i contenuti del primo anno, il secondo anno può vedere i contenuti del primo e del secondo anno, il terzo anno può vedere tutti i contenuti. Funziona benissimo.
Vogliamo aggiungere un altro livello, premiando gli utenti al Livello di Fiducia 3 con accesso anticipato a determinati eventi e risorse.
Ho provato prima a farlo utilizzando eventi non elencati nei vari livelli annuali e inviando un link a tali eventi agli utenti al Livello di Fiducia 3, tuttavia chiunque abbia le notifiche impostate per monitorare il primo, il secondo o il terzo anno può anche vedere istantaneamente tali eventi, non limitato al Livello di Fiducia 3.
Un altro modo per farlo sarebbe creare una categoria chiamata “Premi Livello di Fiducia 3”, e avere sottocategorie per il primo, il secondo e il terzo anno, ma non è possibile limitare le autorizzazioni in questo modo; poiché il primo, il secondo e il terzo anno devono avere visibilità sulla categoria, ancora una volta, tutti gli utenti in quei gruppi (con qualsiasi livello di Fiducia) possono vedere nelle sottocategorie.
Un modo molto goffo per farlo sarebbe esportare gli utenti al Livello di Fiducia 3, quindi esportare gli utenti (ad esempio) del secondo anno, unirli in Excel per trovare i duplicati, quindi importare tali duplicati in un gruppo chiamato qualcosa come “Livello di Fiducia 3 e Secondo Anno”. Funzionerebbe, ma richiederebbe un bel po’ di lavoro manuale ogni volta, ed è un’azione che vogliamo eseguire regolarmente.
Qualche idea su altri modi per ottenere lo stesso risultato? Un plug-in o uno script personalizzato potrebbe almeno automatizzare il processo di esportazione e importazione?
Creare un nuovo gruppo che contenga gli utenti del gruppo di destinazione che hanno il livello di fiducia 3 è l’unico modo che mi viene in mente per raggiungere questo obiettivo. Discourse non ha una regola AND che può essere utilizzata con le autorizzazioni di sicurezza delle categorie. Una domanda simile è sorta alcune volte sulla creazione di una regola di categoria che esclude i membri di uno o più gruppi.
Se il plugin Data Explorer è disponibile sul tuo sito, potresti utilizzare una query di Data Explorer che restituisce un elenco di tutti gli utenti del gruppo di destinazione che hanno il livello di fiducia 3. Se non hai a che fare con un numero enorme di utenti, dovresti essere in grado di copiare/incollare i nomi utente restituiti dalla query direttamente nel modulo Aggiungi Utenti di un gruppo. Discourse sembra gestire l’aggiunta di nomi utente già esistenti in un gruppo in quel modulo, quindi se esegui la query periodicamente, dovresti essere in grado di continuare a copiare i nomi utente restituiti nel modulo Aggiungi Utenti del gruppo. Nota, non sono sicuro del numero massimo di nomi utente che possono essere incollati nel modulo. Ho appena provato con 80 utenti e funziona senza problemi. Inoltre, se tenti di incollare un elenco esatto di duplicati di utenti nel modulo Aggiungi Utenti, Discourse sembra restituire un errore. L’errore può comunque essere ignorato.
Ecco la query che ho testato. Devi fornire il nome del gruppo, ad esempio ‘year_2’, prima di eseguire la query.
--[params]
-- string :group_name
SELECT u.username
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
JOIN users u ON u.id = gu.user_id
WHERE g.name = :group_name
AND u.trust_level = 3
Sarebbe possibile automatizzare il processo sopra descritto eseguendo la query di Data Explorer tramite l’API, quindi utilizzando i risultati della richiesta API per aggiornare il gruppo. I dettagli sono qui: Esegui query Data Explorer con l’API Discourse. Dovresti quindi aggiornare i membri del gruppo tramite l’API.
Sarebbe interessante poter eseguire alcuni tipi di azioni direttamente sui risultati di una query di Data Explorer. Ad esempio, con una query che restituisce un elenco di nomi utente, aggiungere tutti gli utenti a un gruppo senza dover passare attraverso il passaggio di copia/incolla.
Grazie!
Non ho ancora usato Data Explorer, ma è nella mia lista di cose da esplorare, e questo sembra un modo plausibile per fare quello che sto cercando di fare. Ci darò un’occhiata…
Grazie anche per la query.
Solo per riferire su cosa abbiamo deciso di fare qui, nel caso fosse utile ad altri. In breve, stiamo esportando in Excel, chiedendo a Excel di determinare chi soddisfa i nostri criteri ‘AND’, quindi aggiungendo in blocco tali utenti a un gruppo.
Abbiamo chiesto al nostro assistente tecnico di esaminare un plug-in personalizzato per fare la stessa cosa, ma sembra che si stia rivelando un po’ complicato, quindi per il momento rimaniamo con Excel.
Maggiori dettagli:
Esporta l’intero database utenti.
Importa in Excel. Utilizza ISNUMBER e SEARCH per estrarre gli utenti di un gruppo specifico nel primo foglio in un secondo foglio.
Utilizza nuovamente ISNUMBER e SEARCH per estrarre gli utenti del secondo gruppo specifico in un terzo foglio.
Aggiungi in blocco tali utenti ai loro gruppi appropriati.
Immagino ci sia un modo più pulito per ottenere lo stesso risultato, tuttavia ora che è in atto, si tratta solo di incollare i dati esportati ogni volta e quindi importare i risultati, senza doverci pensare durante il processo.
Stiamo utilizzando questo sistema per premiare gli utenti ‘regolari’ tl3 con privilegi aggiuntivi e accesso anticipato alle cose, e sta avendo l’effetto desiderato di incoraggiare un utilizzo di qualità e quantità superiori. Quindi, successo, sebbene un po’ goffo e non automatizzato. Abbiamo la nostra funzione ‘questo gruppo E quell’altro gruppo’.
Potresti usare il nuovo script di automazione ‘Appartenenza ai gruppi utente tramite badge’ per collegare questo? Soprattutto se hai abilitato i badge attivati personalizzati.