Estou usando o Discourse via API como backend para minha comunidade. Existem certas categorias que devem ser restritas para usuários comuns, de modo que eles não possam criar tópicos nem editar os títulos dos tópicos. No entanto, eles devem conseguir visualizar as discussões e responder a elas. Tudo isso deve ser feito via API (usando um token de administrador) em nome desses usuários. Existe alguma maneira de implementar isso por meio de chamadas de API adequadas e com segurança? Por exemplo, seria suficiente se eu pudesse criar forçadamente uma postagem em uma categoria restrita em nome de um usuário comum (usando uma chave/conta de administrador), mas não encontrei esse caso na documentação da API.
Muito obrigado!
Se você estiver usando uma chave de API de administrador, todas as restrições são removidas, então você deverá ser capaz de criar o tópico. Ou talvez criar o tópico como o usuário e depois movê-lo para a categoria em que você não quer que ele possa postar?
Obrigado. Sei sobre engenharia reversa, mas não há nenhum caso de uso semelhante no front-end do Discourse para interceptar. Quero dizer que, mesmo estando logado como administrador, não há como criar um tópico como outro usuário.
A solução alternativa que implementei por enquanto é permitir que uma categoria específica tenha permissões de visualização/comentário para todos e de visualização/comentário/criação para administradores. Assim, os tópicos são criados apenas pelo “sistema” (de modo que os usuários não possam alterar os títulos), juntamente com uma postagem original baseada em modelo. Depois, posso usar a chave da API para comentar como diferentes usuários nesses tópicos criados.
Acho que o outro grupo que eu estava ajudando tinha usuários fazendo login no Discourse (via SSO, talvez?), de modo que eles agiam em nome próprio. Dessa forma, você obtém todas as proteções de usuário oferecidas pelo Rails. Fazer tudo com uma única chave de API de administrador parece uma receita para o desastre.
Mas, supondo que o que você precise fazer para resolver seu problema atual seja criar o tópico como administrador e depois alterar sua propriedade, isso deve ser razoavelmente direto. (E, claro, torcer para que nada dê errado entre o início e o fim de toda a transação.)
Outra possibilidade seria criar um plugin personalizado que adicionasse uma rota create-as-user (ainda não verifiquei as rotas que mencionei anteriormente para ver se isso já existe de alguma forma).
Mas, quanto mais penso nisso (sabendo que não tenho ideia do que você está realmente fazendo), mais acredito que sua interface frontal deve fazer login como os usuários, para que possa interagir com a API em nome deles.