j3ang
(Alex Wang)
3 Abril , 2022 22:26
1
Olá,
Gostaria de saber se há uma maneira de restringir respostas/replies a certos níveis de confiança ou campos personalizados de usuário? Nossos usuários foram migrados do WordPress com diferentes níveis de associação. Não queremos dar a todos os usuários a capacidade de visualizar respostas, a menos que eles tenham atingido um certo nível de associação.
HAWK
(Hawk)
4 Abril , 2022 03:50
2
[quote=“j3ang, post:1, topic:223032”]para ver respostas a menos que tenham atingido um certo nível de associação.
[/quote]
Para ver ou para responder? São coisas bem diferentes.
j3ang
(Alex Wang)
4 Abril , 2022 03:56
3
@HAWK , ah, desculpe, para responder. eles podem ver o tópico e as respostas, mas não devem poder responder, a menos que estejam em um certo nível.
HAWK
(Hawk)
4 Abril , 2022 03:59
4
Sim, você pode configurar isso no nível da categoria. Adicione cada grupo de nível de confiança e conceda as permissões apropriadas.
j3ang
(Alex Wang)
4 Abril , 2022 04:56
5
E se quisermos realmente ocultar as respostas, e não apenas restringir a permissão de responder? A coluna ‘ver’ está esmaecida.
HAWK
(Hawk)
4 Abril , 2022 05:07
6
Sinto muito, mas você não pode fazer isso.
j3ang
(Alex Wang)
4 Abril , 2022 05:28
7
Seria possível com um plugin personalizado? Suspeito que não deva ser difícil ler o usuário atual e ocultar toda a seção de respostas via JavaScript?
HAWK
(Hawk)
4 Abril , 2022 05:32
8
Desculpe, quis dizer que não é possível nativamente. Quase tudo é possível com um plugin personalizado!
j3ang
(Alex Wang)
5 Abril , 2022 00:13
9
Como estou tentando realizar isso por meio de um plugin personalizado. Acho que estou quase lá editando e substituindo a variável postsToRender.
TopicRoute.reopen({
setupController(controller, model) {
this._super(controller, model);
topicController = controller;
console.log(topicController);
let userPrivileged = userCanViewAnswers(topicController.currentUser);
const postStream = topicController.get("model.postStream");
window.postStream = postStream;
window.topicController = topicController;
topicController.postsToRender = userPrivileged ? topicController.postsToRender : topicController.postsToRender.posts.filter(p=>p.post_number == 1);
}
});
function userCanViewAnswers(user){
let user_groups = user.groups.map(g => g.name);
return user_groups.includes('privileged');
}
Parece que ele mostrará um erro “não encontrado” brevemente e recarregará corretamente ao recarregar a página ou voltar após a página inicial.
Estou usando a imagem de desenvolvimento Docker do MacOS, meio lenta.
Desculpe, ainda não estou familiarizado com a base de código do Discourse.
Existe uma maneira melhor de interceptar as postagens no carregamento do tópico?
j3ang
(Alex Wang)
5 Abril , 2022 18:29
10
Vejo que eu deveria reabrir o Controller.
TopicController.reopen({
@discourseComputed(
"model.postStream.posts",
"model.postStream.postsWithPlaceholders"
)
postsToRender(posts,postsWithPlaceholders ){
let userPrivileged = userCanViewAnswers(this.currentUser);
return userPrivileged
? (this.capabilities.isAndroid ? posts : postsWithPlaceholders)
: (this.capabilities.isAndroid ? posts.slice(0, 1) : postsWithPlaceholders.slice(0, 1));
}
})