Nessuna notifica di categoria per gli utenti in fase di staging in una categoria privata

Gli utenti in fase di staging sulla mia istanza non ricevono notifiche e-mail per i post nelle categorie private, anche se sono stati aggiunti a un gruppo che dovrebbe concedere loro i permessi necessari. Sembra che questa funzionalità abbia smesso di funzionare a seguito di un recente cambiamento in Discourse.


:ballet_shoes: Passaggi per riprodurre il problema:

  1. Crea un utente in fase di staging
  1. Crea una categoria visibile solo a un gruppo specifico (i membri possono “Creare / Rispondere / Visualizzare”, ma non sono assegnati altri permessi)

  2. Aggiungi l’utente in fase di staging al gruppo inserendo il suo indirizzo e-mail nel pulsante “Aggiungi in blocco al gruppo”

  • La finestra di dialogo “Aggiungi membri” non riconosce i nomi utente degli utenti in fase di staging, probabilmente per progettazione)
  • Tuttavia, l’utente appare nell’elenco dei membri
  1. Vai alla pagina delle preferenze dell’utente in fase di staging e impostala su “Osservando” la categoria

  2. Crea un nuovo post nella categoria privata

:white_check_mark: Sul sito di sviluppo della nostra comunità (in esecuzione su v2.4.0.beta3 +10) questo invia correttamente una notifica e-mail all’utente in fase di staging, nonché a qualsiasi utente non in fase di staging che sta osservando la categoria.

:negative_squared_cross_mark: Sul nostro sito live, in esecuzione su 2.4.0.beta9, nulla relativo al post appare nella pagina delle notifiche dell’utente. Se poi rimuovo lo stato di staging dell’utente cliccando su “Impersona” nella pagina di amministrazione del suo profilo, le notifiche iniziano ad arrivare correttamente.


:wrench: I due siti hanno configurazioni quasi identiche (SSO abilitato su entrambi).


:art: Contesto

Il nostro caso d’uso prevede la migrazione delle mailing list su Discourse, ma le liste sono destinate a sottogruppi privati della nostra comunità (da qui la categoria visibile solo ai membri di un gruppo specifico) – e vorremmo supportare gli utenti in fase di staging per coloro che preferiscono continuare a interagire via e-mail, rendendo così la transizione dalle liste esistenti più semplice.

Il metodo più semplice che abbiamo trovato per permettere alle persone di continuare a ricevere tutti i messaggi inviati alla mailing list per impostazione predefinita (uno dei principali vantaggi del passaggio a Discourse sarà poter ridurre il livello di e-mail senza abbandonare completamente la lista, quindi sembra ragionevole iniziare con il comportamento esistente di ricevere tutto) è utilizzare il plug-in group-category-notification di Mozilla per impostare tutti i membri del gruppo su “Osservando” la categoria.

Ho letto che la possibilità di aggiungere utenti in fase di staging ai gruppi “potrebbe smettere di funzionare in qualsiasi momento”, quindi sono aperto ad altre idee :pray:

1 Mi Piace

Di recente abbiamo implementato una correzione perché gli utenti in staging ricevevano notifiche per contenuti che non avrebbero dovuto poter vedere:

@Roman, tuttavia, se l’utente ha accesso al gruppo, dovrebbe funzionare, giusto?

5 Mi Piace

@eviltrout grazie, sembra esattamente il problema:

# lib/guardian/topic_guardian.rb, riga 152
-    can_see_category?(topic.category)
+    category = topic.category
+    can_see_category?(category) &&
+       (!category.read_restricted || !is_staged? || topic.user == user)

La logica è cambiata: prima si verificava se can_see_category?(topic.category) restituisse vero (cosa che, come vedremo sotto, penso accada), mentre ora la notifica viene bloccata se l’utente è in modalità staging in tutti i casi.

Questo sembra un bug? :bug: Altrimenti gli utenti in staging non riceveranno mai notifiche per i post nelle categorie private, anche se loro è stato esplicitamente concesso il permesso. Dovrei spostare la discussione in Contribute > Bug?

can_see_category?

Penso che can_see_category? restituisca vero a causa dell’ultima riga:

def can_see_category?(category)
    return false unless category
    return true if is_admin?
    return true if !category.read_restricted
    return true if is_staged? && category.email_in.present? && category.email_in_allow_strangers
    # questa riga:
    secure_category_ids.include?(category.id)
  end
  • l’utente è in modalità staging
  • la categoria ha impostato un indirizzo “email in”
  • category.email_in_allow_strangers è abilitato Ho disabilitato email_in_allow_strangers perché ho capito che non mi serve… ma secure_category_ids.include?(category.id) restituisce true
1 Mi Piace

Ho inviato una pull request che ripristina le notifiche per gli utenti in staging:

EDIT: unita! Grazie a tutti

6 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.