j3ang
(Alex Wang)
3 أبريل 2022، 10:26م
1
مرحباً،
أتساءل عما إذا كانت هناك طريقة لتقييد الإجابات/الردود على مستويات ثقة معينة أو حقول مخصصة للمستخدم؟ تم ترحيل المستخدمين لدينا من ووردبريس بمستويات عضوية مختلفة. لا نريد منح جميع المستخدمين القدرة على عرض الإجابات إلا إذا وصلوا إلى مستوى عضوية معين.
HAWK
(Hawk)
4 أبريل 2022، 3:50ص
2
[quote=“j3ang, post:1, topic:223032”]لعرض الإجابات ما لم تصل إلى مستوى عضوية معين.
[/quote]
للعرض أم للرد؟ إنهما شيئان مختلفان تمامًا.
j3ang
(Alex Wang)
4 أبريل 2022، 3:56ص
3
@HAWK ، آه، آسف، للرد. يمكنهم رؤية الموضوع والردود، ولكن لا ينبغي أن يكونوا قادرين على الرد إلا إذا كانوا على مستوى معين.
HAWK
(Hawk)
4 أبريل 2022، 3:59ص
4
نعم، يمكنك إعداد ذلك على مستوى الفئة. أضف كل مجموعة مستوى ثقة وامنحها الأذونات المناسبة.
j3ang
(Alex Wang)
4 أبريل 2022، 4:56ص
5
ماذا لو أردنا بالفعل إخفاء الإجابات وليس مجرد تقييد الإذن بالرد؟ عمود “المشاهدة” معتم.
HAWK
(Hawk)
4 أبريل 2022، 5:07ص
6
أخشى أنك لا تستطيع فعل ذلك.
j3ang
(Alex Wang)
4 أبريل 2022، 5:28ص
7
هل سيكون ذلك ممكنًا باستخدام إضافة مخصصة؟ أشك في أنه يجب أن يكون الأمر صعبًا لقراءة المستخدم الحالي وإخفاء قسم الإجابة بالكامل عبر JavaScript؟
HAWK
(Hawk)
4 أبريل 2022، 5:32ص
8
عذرًا، كنت أعني أنه غير ممكن بشكل مباشر. كل شيء تقريبًا ممكن باستخدام إضافة مخصصة!
j3ang
(Alex Wang)
5 أبريل 2022، 12:13ص
9
بينما أحاول تحقيق ذلك عبر إضافة مخصصة. أعتقد أنني على وشك الانتهاء عن طريق تعديل المتغير 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');
}
يبدو أنه سيظهر خطأ “غير موجود” لفترة وجيزة ويعيد التحميل بشكل صحيح عند إعادة التحميل الكامل للصفحة أو العودة بعد الصفحة الرئيسية.
أنا أستخدم صورة Docker للتطوير على نظام MacOS، وهي بطيئة نوعًا ما.
عذرًا، لست على دراية بقاعدة كود discourse بعد.
هل هناك طريقة أفضل لاعتراض المشاركات عند تحميل الموضوع؟
j3ang
(Alex Wang)
5 أبريل 2022، 6:29م
10
أرى أنه كان من المفترض أن أعيد فتح المتحكم.
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));
}
})