Impossibile aggiungere automaticamente un utente in modalità anonima a un gruppo

Ciao a tutti!

Sto gestendo un forum con Discourse 2.6.0beta3 e penso di aver trovato un bug.

Provo ad aggiungere utenti anonimi a un gruppo chiamato anons, in modo da poter limitare i loro post in alcune categorie specifiche. Ho impostato il gruppo anons per aggiungere automaticamente gli utenti in base al dominio email anon.mydomain.

Quando attivo la modalità anonima, noto che il mio account anonimo non viene aggiunto al gruppo. Tuttavia, se faccio clic sul pulsante Salva modifiche in /g/anons/manage/membership, il mio account anonimo viene aggiunto al gruppo. Vorrei semplicemente che l’utente anonimo venisse aggiunto al gruppo all’ingresso in modalità anonima, senza dover cliccare manualmente.

Ho cercato informazioni su questo bug, ma non ho trovato nulla di utile. Grazie per la lettura!

1 Mi Piace

Posso riprodurre il problema che riscontri quando un utente entra in modalità anonima. Per aggiungere automaticamente l’utente a un gruppo in base al dominio della email anonima, devo accedere alla pagina di gestione del gruppo anonimo e salvare le impostazioni.

Non sono sicuro che l’aggiunta di utenti anonimi a un gruppo basata sul dominio della email anonima sia prevista come funzionalità funzionante. Tuttavia, capisco come sarebbe utile avere tutti gli utenti anonimi in un gruppo. L’approccio di aggiungere utenti anonimi a un gruppo in base al loro dominio email è stato proposto diverse volte su Meta. Un approccio alternativo sarebbe aggiungere un’impostazione “gruppo modalità anonima” che aggiunga automaticamente tutti gli utenti anonimi a un gruppo scelto.

Vediamo se questa è una funzionalità che Discourse intende supportare prima di decidere se si tratta di un bug.

3 Mi Piace

Penso che sarebbe rischioso affidarsi all’email anonima per questa funzionalità. Potremmo considerare la possibilità di creare un altro gruppo automatico per gli utenti anonimi e aggiungerli lì automaticamente.

Non lo considero comunque un bug, quindi lo ricategorizzo.

3 Mi Piace

Ciao, questo argomento è pertinente a un problema che sto riscontrando su un forum che sto aiutando a configurare/amministrare. Alcuni contesti: il forum richiede che gli utenti paghino per iscriversi e poter pubblicare. Vogliamo anche che i membri paganti con un certo livello di fiducia possano pubblicare in modo anonimo passando alla modalità anonima. Inoltre, vogliamo che tutti possano leggere i contenuti (tranne, ovviamente, quelli riservati solo allo staff).

Per quanto ne so, gli utenti anonimi fanno automaticamente parte del gruppo “tutti”. Se volessimo permettere a chiunque di pubblicare sul forum, non ci sarebbe alcun problema legato all’impossibilità degli anonimi di postare. Tuttavia, dato che si tratta di un forum a pagamento, abbiamo impostato il gruppo “tutti” come sola lettura, in modo che chiunque possa leggere ma non pubblicare.

Vogliamo comunque che gli utenti con il livello di fiducia richiesto possano pubblicare in modo anonimo. La soluzione prevista era creare un gruppo di utenti anonimi con il permesso di scrivere post e aggiungere membri in base al dominio email anonimo che utilizziamo sul forum. Tuttavia, l’aspetto automatico dell’aggiunta non funziona: un amministratore deve accedere al gruppo degli utenti anonimi e salvare le modifiche affinché gli anonimi vengano effettivamente aggiunti. Questo è piuttosto fastidioso e interrompe il flusso che vorremmo, ovvero che un membro pagante con il livello di fiducia richiesto possa passare alla modalità anonima e pubblicare liberamente in modo anonimo.

Ho capito che l’aggiunta automatica degli utenti anonimi a un gruppo è una funzione che forse è in fase di valutazione per Discourse ma non è ancora stata implementata. Supponendo che sia così, esiste un altro modo ragionevole per configurare il mio Discourse in modo da ottenere il risultato desiderato, o devo attendere che gli dei di Discourse aggiungano finalmente questa funzione? Grazie :slight_smile:

Ho scritto un plugin per copiare tutti i gruppi di un utente nella sua ombra quando l’ombra viene creata:

Disclaimer: Sono completamente nuovo a Ruby e, sebbene funzioni sulla mia installazione, non ho idea se funzioni altrove.

2 Mi Piace

+1 per questa funzionalità. È mai stata implementata? Non la vedo. O forse qualcuno conosce un plugin per farlo?

(Per tua informazione: ho trovato questo, che sembra una soluzione alternativa discreta.)

uno dei miei utenti ha creato un plugin per me per aggiungere automaticamente account anonimi a un gruppo del forum. ecco il mio fork su github che sto usando. GitHub - curi/cf-anon-auto-group: Discourse plugin to trigger `user.set_automatic_groups` for anons on login ha funzionato bene

abbiamo bisogno di questo per dare loro le giuste autorizzazioni in modo che possano pubblicare qualsiasi cosa.

forse altri potrebbero usare questa soluzione o qualcuno potrebbe capire come creare un plugin più ufficiale o unire il codice.

funziona in combinazione con l’impostazione di appartenenza automatica al gruppo tramite email (che nella nostra esperienza non ha funzionato da sola):

Per completezza, ho “risolto” questo problema a livello di database in un forum che gestisco. Usalo solo se non riesci a trovare altre soluzioni di livello superiore (ci sono stati progressi in merito, o qualche risposta esistente dovrebbe essere contrassegnata come “risolta”?). Ecco il codice PostgreSQL:

create or replace function anon_insert_copy_groups_to_anon_user()
  RETURNS TRIGGER
  LANGUAGE PLPGSQL
  AS $$
declare
  anon_user_id integer = new.user_id;
  master_user_id integer = new.master_user_id;
  active boolean = new.active;
  created_at timestamp = new.created_at;
  updated_at timestamp = new.updated_at;
BEGIN
  insert into group_users
        (group_id,                user_id,       created_at,        updated_at,        owner, notification_level,     first_unread_pm_at)
  select group_users.group_id, anon_user_id , current_timestamp, current_timestamp, false, 3 as notification_level, current_timestamp
  from group_users
  where group_users.user_id=master_user_id
  and   group_users.group_id not in (select group_id from group_users where group_users.user_id=anon_user_id)
  and   group_users.group_id not in (1, 2, 3); -- escludi amministratori, moderatori e staff!

  return new;
end;
$$;

-- Crea il trigger
CREATE TRIGGER anon_insert_trigger
AFTER INSERT ON anonymous_users
  FOR EACH ROW
    EXECUTE FUNCTION anon_insert_copy_groups_to_anon_user();