Não é possível adicionar usuário em modo anônimo a um grupo automaticamente

Olá a todos!

Estou rodando um fórum com o Discourse 2.6.0beta3 e acredito ter encontrado um bug.

Estou tentando adicionar usuários anônimos a um grupo chamado anons, para que eu possa restringir suas postagens em algumas categorias específicas. Configurei o grupo anons para adicionar usuários automaticamente com base no domínio de e-mail anon.mydomain.

Quando entro no modo anônimo, percebo que minha conta anônima não é adicionada ao grupo. No entanto, se eu clicar no botão Salvar Alterações em /g/anons/manage/membership, minha conta anônima é adicionada a esse grupo. Quero apenas que o usuário anônimo seja adicionado a esse grupo ao entrar no modo anônimo, sem que eu precise clicar.

Pesquisei sobre esse bug, mas não encontrei informações úteis. Obrigado por ler!

1 curtida

Consigo reproduzir o que você está encontrando quando um usuário entra no modo anônimo. Para que o usuário seja adicionado automaticamente a um grupo com base no domínio do e-mail anônimo, preciso ir à página de gerenciamento do grupo anônimo e salvar as configurações.

Não tenho certeza se é esperado que a adição de usuários anônimos a um grupo com base no domínio do e-mail anônimo funcione. No entanto, vejo como seria útil ter todos os usuários anônimos em um grupo. A abordagem de adicionar usuários anônimos a um grupo com base em seu domínio de e-mail já foi sugerida algumas vezes no Meta. Uma abordagem alternativa seria adicionar uma configuração de grupo do modo anônimo que adicione automaticamente todos os usuários anônimos a um grupo escolhido.

Vamos ver se essa é uma funcionalidade que o Discourse deseja suportar antes de decidir se é um bug.

3 curtidas

Acho que seria arriscado confiar no e-mail anônimo para essa funcionalidade. Podemos considerar criar outro grupo automático para usuários anônimos e adicioná-los lá automaticamente.

No entanto, não considero isso um bug, então estou recategorizando.

3 curtidas

Olá, este tópico é relevante para um problema que estou enfrentando em um fórum que estou ajudando a configurar/administrar. Um pouco de contexto: o fórum exige que as pessoas paguem para se cadastrar como usuários que podem postar. Também queremos que membros pagos com um certo nível de confiança possam postar anonimamente, alternando para o modo anônimo. Além disso, queremos que todos possam ler o conteúdo (exceto, claro, coisas restritas apenas à equipe).

Pelo que entendi, usuários anônimos são automaticamente incluídos no grupo de usuários “todos”. Se quiséssemos permitir que o mundo inteiro postasse no fórum, não haveria problema em anônimos não conseguirem postar. No entanto, como é um fórum pago, configuramos o grupo “todos” como somente leitura, para que o mundo possa ler, mas não postar.

Ainda queremos que usuários com o nível de confiança necessário possam postar anonimamente. A solução pretendida era criar um grupo de usuários anônimos com permissão para escrever posts e adicionar pessoas com base no domínio de e-mail anônimo que usamos no fórum. No entanto, a parte automática de adicionar os usuários não está funcionando: um administrador precisa ir até o grupo de usuários anônimos e salvar as alterações para que os anônimos sejam realmente adicionados. Isso é bem chato e atrapalha o fluxo que gostaríamos, que é: um membro pago com o nível de confiança necessário alterna para o modo anônimo e pode postar livremente.

Entendo que ter usuários anônimos adicionados automaticamente a um grupo é um recurso que talvez esteja sendo considerado como uma adição ao Discourse, mas ainda não foi implementado. Supondo que seja esse o caso, existe alguma outra maneira razoável de configurar meu Discourse para obter o resultado desejado, ou devo aguardar que os deuses do Discourse adicionem esse recurso? Obrigado :slight_smile:

Escrevi um plugin para copiar todos os grupos de um usuário para sua sombra quando a sombra é criada:

Disclaimer: Sou totalmente novo em Ruby e, embora funcione na minha instalação, não tenho ideia se funciona em outros lugares.

2 curtidas

+1 para esta funcionalidade. Ela chegou a ser implementada? Eu não a vejo. Ou talvez alguém conheça um plugin para fazer isso?

(Para sua informação: Eu encontrei isto, que parece uma solução alternativa decente.)

um dos meus usuários criou um plugin para que contas anônimas fossem adicionadas automaticamente a um grupo do fórum. aqui está meu fork no github que estou usando. GitHub - curi/cf-anon-auto-group: Discourse plugin to trigger `user.set_automatic_groups` for anons on login tem funcionado bem

precisamos disso para dar a eles as permissões corretas para que possam postar qualquer coisa.

talvez outros possam usar esta solução ou alguém possa descobrir como fazer um plugin mais oficial ou mesclar o código.

funciona em combinação com a configuração de associação automática de grupo por e-mail (que não funcionou sozinha em nossa experiência):

Para que conste, eu “resolvi” este problema no nível do banco de dados em um fórum que administro. Use apenas se não conseguir obter outras soluções de nível superior (houve algum progresso nisso, ou alguma resposta existente deve ser marcada como “resolvida”?). Aqui está o código 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); -- exclui administradores, moderadores e equipe!

  return new;
end;
$$;

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