こんにちは。
回答/返信を特定の信頼レベルまたはカスタムユーザーフィールドに制限する方法があるかどうか疑問に思っています。ユーザーはWordPressから異なるメンバーシップレベルで移行されます。特定のメンバーシップレベルに達しない限り、すべてのユーザーに回答を表示する機能を与えたくありません。
こんにちは。
回答/返信を特定の信頼レベルまたはカスタムユーザーフィールドに制限する方法があるかどうか疑問に思っています。ユーザーはWordPressから異なるメンバーシップレベルで移行されます。特定のメンバーシップレベルに達しない限り、すべてのユーザーに回答を表示する機能を与えたくありません。
表示する、または返信する、どちらですか? それらは全く異なるものです。
@HAWK 、ああ、すみません、返信するためです。トピックと返信は表示できますが、特定のレベルにならない限り返信することはできません。
回答を制限するだけでなく、実際には回答を非表示にしたい場合はどうすればよいでしょうか。「表示」列はグレー表示されています。
残念ながら、それはできません。
カスタムプラグインで可能でしょうか? 現在のユーザーを読み取り、JavaScriptで回答セクション全体を非表示にするのはそれほど難しくないはずだと推測します。
申し訳ありませんが、標準では不可能だということです。カスタムプラグインを使えば、ほぼ何でも可能です!
カスタムプラグイン経由でこれを達成しようとしています。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');
}
ページをハードリロードするか、ホームページに戻った後に、一時的に「見つかりません」というエラーが表示され、正しく再読み込みされるようです。
macOS Docker 開発イメージを使用しており、かなり遅いです。
すみません、まだ Discourse のコードベースに慣れていません。
トピックの読み込み時に投稿をインターセプトするより良い方法はありますか?
コントローラーを再オープンする必要があったのですね。
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));
}
})
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.