Remover um usuário de um grupo com efeito de Nível de Confiança não recalcula as associações de Grupos Automáticos dos usuários

Eu li o tópico, Group trust level onde é dito,

Assim como este tópico mais antigo, Should losing group membership unlock trust level?

Onde a situação descrita em grande parte corresponde à minha experiência,

Mas, o que eu descobri na minha própria instância de teste do Discourse é isto…

Com todas as configurações de Nível de Confiança no padrão, tenho uma conta TL1 (U) e um grupo chamado tl3 que concede Trust_Level_3.

  1. Condições iniciais
    • Nível de Confiança: 1: usuário básico Desbloqueado
    • Grupos Automáticos: trust_level_0, trust_level_1
    • Grupos Personalizados: Nenhum
  2. Adicionar U ao tl3
    • Nível de Confiança: 3: Regular Desbloqueado
    • Grupos Automáticos: trust_level_0, trust_level_1, trust_level_2, trust_level_3
    • Grupos Personalizados: tl3
  3. Remover U do tl3
    • Nível de Confiança: 2: Membro Desbloqueado
    • Grupos Automáticos: trust_level_0, trust_level_1, trust_level_2, trust_level_3
    • Grupos Personalizados: Nenhum
    • NOTA: Apesar de ter um nível de confiança 2, o usuário ainda está no grupo automático trust_level_3. Com o entendimento de que um usuário não pode ser rebaixado para TL1 sem um nível de confiança bloqueado, o resultado esperado aqui é que o usuário perca imediatamente a associação ao grupo automático trust_level_2.
  4. Bloquear o nível de confiança de U
    • Nível de Confiança: 2: Membro Bloqueado
    • Grupos Automáticos: trust_level_0, trust_level_1, trust_level_2, trust_level_3
    • Grupos Personalizados: Nenhum
    • NOTA: Apesar de ter um Nível de Confiança de 2: Membro, o usuário ainda está no grupo automático trust_level_3.
  5. Desbloquear o nível de confiança de U
    • Nível de Confiança: 1: Básico Desbloqueado
    • Grupos Automáticos: trust_level_0, trust_level_1
    • Grupos Personalizados: Nenhum

Portanto, ao cancelar a inscrição de um usuário em um grupo, o Nível de Confiança é recalculado automaticamente e instantaneamente, mas a associação ao grupo automático não é recalculada, a menos que o nível de confiança do usuário experimente um evento de desbloqueio.

Minha suposição é que as associações de grupos automáticos são computadas em todo o sistema para todos os usuários uma vez por dia e as associações de grupos automáticos serão retificadas nesse momento. Mas parece que as associações de grupos automáticos deveriam ser acionadas ao remover um usuário de um grupo com efeito de nível de confiança ou acionadas imediatamente após qualquer alteração no nível de confiança, não apenas em um aumento do nível de confiança.

Então, a chamada da API de backend para,

POST {{site}}/admin/users/{{userId}}/groups

atualiza as associações de grupos automáticos, mas

DELETE {{site}}/admin/users/{{usedId}}/groups/{{groupId}}

não o faz, o que parece um bug, especialmente se você estiver usando grupos automáticos de nível de confiança para controle de acesso.

E, para completar, obviamente as chamadas para,

PUT {{site}}/admin/users/{{userId}}/trust_level

que são invocadas ao alterar manualmente o nível de confiança de um usuário na interface de administração, imediatamente recompilam as associações de grupos automáticos como esperado.

2 curtidas

Sim, a coisa fundamental de dev xp aqui é que devemos proibir essa manipulação de grupos automáticos e forçá-lo a usar PUT {{site}}/admin/users/{{userId}}/trust_level apenas para transição de coisas. Retorne um 422 ou algo assim se as pessoas tentarem usar endpoints para adicionar ou remover pessoas manualmente dos grupos.

Desfazer o nível de confiança deve sempre acontecer a partir daqui:

Porque isso também suporta o bloqueio, que é crítico.

Entendo.
Só quero deixar claro que toda a parte da API foi apenas vista gravando o fluxo XHR ao executar ações em associações de grupo através da interface do usuário de associação de grupo. Na verdade, não estou executando essas ações como chamadas de API, são apenas as chamadas de API que estão sendo feitas ao usar a interface do usuário.

Então, meu raciocínio é que, se houver um grupo com um efeito TL3, clicar neste botão,

deveria remover imediatamente os membros do grupo trust_level_3 se eles não atenderem aos requisitos para o Nível de Confiança 3 ou se esse nível de confiança estiver bloqueado.

O caso de uso imaginado aqui é permitir, digamos, que um grupo de usuários TL4 seja definido como proprietários de um grupo com um efeito TL3 para que eles possam promover manualmente pessoas para TL3.

O aspecto da promoção funciona, mas os mesmos usuários que removem alguém do grupo com efeito TL3 não têm o efeito imediato de remover o usuário afetado do trust_level_3.

Entender completamente isso é um uso muito fora do padrão do recurso.
Parece apenas incongruente que um usuário possa ter seu Nível de Confiança alterado de 3 para 2 e permanecer no grupo trust_level_3 até o próximo evento de recálculo.

2 curtidas