Sem notificações de categoria para usuários em fase de teste em categoria privada

Usuários em estágio na minha instância não estão recebendo notificações por e-mail para posts em categorias privadas, mesmo tendo sido adicionados a um grupo que deveria conceder essa permissão. Isso parece ter deixado de funcionar com uma alteração recente no Discourse.


:ballet_shoes: Passos para reproduzir:

  1. Criar um usuário em estágio
  1. Criar uma categoria visível apenas para um grupo específico (os membros podem “Criar / Responder / Ver”, mas nenhuma outra permissão foi atribuída)

  2. Adicionar o usuário em estágio ao grupo inserindo o endereço de e-mail deles no botão “Adicionar Membros em Massa ao Grupo”

  • A caixa de diálogo “Adicionar Membros” não reconhece os nomes de usuário de usuários em estágio, provavelmente por design)
  • No entanto, o usuário aparece na lista de membros
  1. Acessar a página de preferências do usuário em estágio e defini-los como “Observando” a categoria

  2. Fazer um novo post na categoria privada

:white_check_mark: No site de desenvolvimento da minha comunidade (executando v2.4.0.beta3 +10), isso envia com sucesso uma notificação por e-mail ao usuário em estágio, bem como a qualquer usuário não em estágio que esteja observando a categoria.

:negative_squared_cross_mark: No nosso site em produção, executando a versão 2.4.0.beta9, nada relacionado ao post aparece na página de notificações do usuário. Se eu depois remover o status de estágio do usuário clicando em “Personificar” na página de administração do perfil deles, as notificações começam a chegar normalmente.


:wrench: Os dois sites têm configurações quase idênticas (o SSO está habilitado em ambos).


:art: Contexto

Nosso caso de uso é que estamos migrando listas de e-mail para o Discourse, mas as listas são para subgrupos privados da nossa comunidade (daí a categoria visível apenas para membros de um grupo específico) – e gostaríamos de suportar usuários em estágio para pessoas que preferem continuar interagindo por e-mail, tornando a transição das listas existentes mais simples.

A maneira mais fácil que encontramos para as pessoas continuarem recebendo todas as mensagens enviadas para a lista de e-mail por padrão (uma das principais vantagens de migrar para o Discourse será poder reduzir o nível de e-mails sem sair completamente da lista, então parece justo começar com o comportamento existente de receber tudo) é usar o plug-in group-category-notification da Mozilla para que todos os membros do grupo estejam “Observando” a categoria.

Li que a capacidade de adicionar usuários em estágio a grupos “pode parar de funcionar a qualquer momento”, então estou aberto a outras ideias :pray:

1 curtida

Recentemente, adicionamos uma correção porque usuários em fase de teste estavam recebendo notificações para conteúdo que não deveriam ter acesso:

@Roman, ainda assim, se o usuário tiver acesso ao grupo, deveria funcionar, certo?

5 curtidas

@eviltrout Obrigado, isso parece ser exatamente o problema:

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

A lógica mudou de verificar se can_see_category?(topic.category) retorna verdadeiro (o que acredito que sim, conforme abaixo), para desabilitar a notificação se o usuário estiver em modo staged em todos os casos.

Isso parece ser um bug? :bug: Caso contrário, usuários em modo staged nunca receberão notificações de posts em categorias privadas, mesmo que tenham recebido permissão explícita. Devo mover isso para bug?

can_see_category?

Acho que can_see_category? está retornando verdadeiro por causa da última linha:

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
    # esta aqui:
    secure_category_ids.include?(category.id)
  end
  • o usuário está em modo staged
  • a categoria tem um endereço de “email in” configurado
  • category.email_in_allow_strangers está habilitado Desabilitei email_in_allow_strangers porque percebi que não preciso dele… mas secure_category_ids.include?(category.id) retorna true
1 curtida

Enviei um pull request que restaura as notificações para usuários em staging:

EDIT: mesclado! Obrigado a todos.

6 curtidas

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