É fácil usar categorias e subcategorias para permitir que os usuários as visualizem com base na lógica ‘OU’ - ou seja, se um usuário estiver no Grupo X ou no Grupo Y, ele poderá ver a categoria ou subcategoria.
É possível usar efetivamente a lógica ‘E’, de modo que um usuário deva estar em ambos os Grupos X E Y para poder ver uma categoria / subcategoria?
Nosso caso de uso é que temos três níveis de acesso. É mais fácil pensar neles como alunos do 1º Ano, alunos do 2º Ano e alunos do 3º Ano. O 1º Ano só pode ver o conteúdo do 1º Ano, o 2º Ano pode ver o conteúdo do 1º e 2º Ano, o 3º Ano pode ver todo o conteúdo. Funciona muito bem.
Queremos adicionar outra camada, recompensando os usuários no Nível de Confiança 3 com acesso antecipado a certos eventos e recursos.
Primeiro tentei fazer isso usando eventos não listados nos vários níveis de ano e enviando um link para esses eventos para usuários no Nível de Confiança 3, no entanto, qualquer pessoa com notificações configuradas para monitorar o 1º, 2º ou 3º Ano também pode ver instantaneamente esses eventos, não limitado ao Nível de Confiança 3.
Outra maneira de fazer isso seria criar uma categoria chamada “Recompensas do Nível de Confiança 3”, e ter subcategorias para o 1º, 2º e 3º Ano, mas não é possível restringir permissões assim; como o 1º, 2º e 3º Ano têm que ter visibilidade sobre a categoria, novamente, todos os usuários nesses grupos (com qualquer nível de Confiança) podem ver as subcategorias.
Uma maneira muito desajeitada de fazer isso seria exportar usuários no Nível de Confiança 3, depois exportar usuários no (por exemplo) 2º Ano, mesclá-los no Excel para encontrar duplicatas, depois importar essas duplicatas para um grupo chamado algo como “Nível de Confiança 3 e 2º Ano”. Funcionaria, mas exigiria um pouco de trabalho manual a cada vez, e é uma ação que queremos realizar regularmente.
Alguma ideia sobre outras maneiras de alcançar o mesmo resultado? Um plugin ou script personalizado poderia pelo menos automatizar o processo de exportação e importação?
Criar um novo grupo que contenha os usuários do grupo de destino que têm o nível de confiança 3 é a única maneira que consigo pensar para realizar isso. O Discourse não tem uma regra E que possa ser usada com permissões de segurança de categoria. Uma pergunta semelhante surgiu algumas vezes sobre a criação de uma regra de categoria que exclui membros de um ou mais grupos.
Se o plugin Data Explorer estiver disponível em seu site, você poderá usar uma consulta do Data Explorer que retorne uma lista de todos os usuários do grupo de destino que têm o nível de confiança 3. Se você não estiver lidando com um grande número de usuários, deverá ser capaz de copiar/colar os nomes de usuário retornados pela consulta diretamente no formulário Adicionar Usuários de um grupo. O Discourse parece lidar com a adição de nomes de usuário que já existem em um grupo nesse formulário, portanto, se você executar a consulta periodicamente, poderá continuar copiando os nomes de usuário retornados para o formulário Adicionar Usuários do grupo. Observe que não tenho certeza sobre o número máximo de nomes de usuário que podem ser colados no formulário. Acabei de testá-lo com 80 usuários e isso funciona sem problemas. Além disso, se você tentar colar uma lista exata de usuários duplicados no formulário Adicionar Usuários, o Discourse parece retornar um erro. No entanto, o erro pode ser ignorado.
Aqui está a consulta com a qual testei isso. Você precisa fornecer o nome do grupo, por exemplo, ‘year_2’, antes de executar a consulta.
--[params]
-- string :group_name
SELECT u.username
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
JOIN users u ON u.id = gu.user_id
WHERE g.name = :group_name
AND u.trust_level = 3
Seria possível automatizar o processo acima executando a consulta do Data Explorer via API, e então usando os resultados da solicitação da API para atualizar o grupo. Detalhes sobre isso estão aqui: Execute consultas do Data Explorer com a API do Discourse. Você precisaria então atualizar os membros do grupo via API.
Seria interessante poder executar alguns tipos de ações diretamente nos resultados de uma consulta do Data Explorer. Por exemplo, com uma consulta que retorna uma lista de nomes de usuário, adicionar todos os usuários a um grupo sem ter que passar pela etapa de copiar/colar.
Obrigado!
Eu não brinquei com o Explorador de Dados, mas ele está na minha lista de coisas para explorar, e isso parece uma maneira plausível de fazer o que estou tentando fazer. Vou dar uma olhada…
Obrigado também pela consulta.
Apenas reportando o que acabamos fazendo aqui, caso seja útil para outros. Em resumo, estamos exportando para o Excel, fazendo o Excel descobrir quem atende aos nossos critérios ‘E’, e então adicionando em massa esses usuários a um grupo.
Pedimos ao nosso assistente técnico para investigar um plugin personalizado para fazer o mesmo, mas parece que está se mostrando um pouco complicado, então, por enquanto, ficamos com o Excel.
Mais detalhes:
Exportar todo o banco de dados de usuários.
Importar para o Excel. Usar ISNUMBER e SEARCH para extrair usuários de um grupo específico na primeira planilha para uma segunda planilha.
Usar ISNUMBER e SEARCH novamente para extrair usuários do segundo grupo específico para uma terceira planilha.
Adicionar em massa esses usuários aos seus grupos apropriados.
Imagino que haja uma maneira mais limpa de alcançar o mesmo resultado, no entanto, agora que está implementado, é apenas uma questão de colar os dados exportados a cada vez e, em seguida, importar os resultados, sem precisar pensar nisso no processo.
Estamos usando este sistema para recompensar usuários ‘regulares’ tl3 com privilégios adicionais e acesso antecipado a coisas, e está tendo o efeito desejado de incentivar um uso de maior qualidade e maior quantidade. Então, sucesso, embora um pouco desajeitado e não automatizado. Temos nossa função ‘este grupo E aquele grupo’.
Você poderia usar o novo script de Automação ‘Associação de Grupo de Usuários por Emblema’ para talvez vincular isso? Especialmente se você tiver emblemas acionados personalizados habilitados.