إذا فهمت هذا بشكل صحيح، فإن هذا يعمل كما هو “مقصود” بواسطة الكود على الأقل:
لا يمكن للمستخدمين من المستوى الثالث (TL3) التعديل إلا إذا كان الموضوع مؤرشفًا أو كان رسالة خاصة (PM).
أعتقد أنه يمكنك تغيير إعداد trusted_users_can_edit_others إذا كنت ترغب في تعطيل هذا السلوك. حسب علمي، فإن القيمة الافتراضية لـ trusted_users_can_edit_others ليست false للحفاظ على سلوك متسق مع ما كان عليه قبل إدخال هذا الإعداد.
ما هو الغرض من قفل المنشورات إذن؟ لا يوجد غرض. أو لم أجد غرضًا، وبالتالي فإن الميزة إما قديمة، أو معطلة، أو على الأقل مربكة.
النص يقول بوضوح “قام عضو في الطاقم بقفل هذا المنشور من التعديل عليه”. إذا كان للقفل غرض مختلف تمامًا عن حماية المنشور/الموضوع من تعديلات منشئه الأصلي (OP)، فيجب تغيير هذا النص.
يجب ألا يكون المنشورات المقفلة قابلة للتعديل من قبل المستخدمين غير الموظفين، على الرغم من الإعداد الذي يسمح للمستخدمين ذوي مستويات الثقة العالية بتعديل المنشورات (والذي نفضله بشكل عام، ولكن ليس بالنسبة للمنشورات المقفلة بطبيعة الحال).
يبدو من الكود أدناه أن “قفل” منشور يعني حاليًا أن منشئ المنشور الأصلي (OP) فقط هو من لا يستطيع تعديله بعد الآن. لا يزال المستخدمون من مستوى الثقة 3 و4 (TL3, TL4) والموظفون قادرين على تعديل المنشور المقفل (إذا كان مفعّلًا في الإعدادات).
هذا يحد من ميزة القفل بشكل كبير جدًا لاستخدام حالة محدودة للغاية.
كيف يمكنني حماية إعلان إداري رسمي مهم جدًا من أن يقوم مستخدم واحد غير موثوق من مستوى الثقة 3 بتغييره إلى “هذا منشور ميكي ماوس” ووسمه بشكل خاطئ ونقله إلى فئة غير ذات صلة، بينما أريد في الوقت نفسه أن يحتفظ مستخدمو TL3/TL4 بالقدرة على تعديل المنشورات بشكل عام؟
يجب أن يعني “مقفل” (Locked) أنه غير قابل للتعديل (uneditable) للجميع باستثناء الموظفين.
def can_edit_topic?(topic)
return false if Discourse.static_doc_topic_ids.include?(topic.id) && !is_admin?
return false unless can_see?(topic)
return true if is_admin?
return true if is_moderator? && can_create_post?(topic)
# لا يمكن تعديل المواضيع في الفئات المؤمنة حيث لا تملك إذن إنشاء مواضيع
# باستثناء حالة هامشية صغيرة حيث الموضوع غير مصنف وتحاول إصلاحه ولكن تصنيف غير مصنف معطل
if (
SiteSetting.allow_uncategorized_topics ||
topic.category_id != SiteSetting.uncategorized_category_id
)
return false if !can_create_topic_on_category?(topic.category)
end
# مستخدمو TL4 يمكنهم تعديل المواضيع المؤرشفة، لكن لا يمكنهم تعديل الرسائل الخاصة
return true if (
SiteSetting.trusted_users_can_edit_others? &&
topic.archived &&
!topic.private_message? &&
user.has_trust_level?(TrustLevel[4]) &&
can_create_post?(topic)
)
# مستخدمو TL3 لا يمكنهم تعديل المواضيع المؤرشفة والرسائل الخاصة
return true if (
SiteSetting.trusted_users_can_edit_others? &&
!topic.archived &&
!topic.private_message? &&
user.has_trust_level?(TrustLevel[3]) &&
can_create_post?(topic)
)
return false if topic.archived
is_my_own?(topic) &&
!topic.edit_time_limit_expired?(user) &&
**!Post.where(topic_id: topic.id, post_number: 1).where.not(locked_by_id: nil).exists?**
end
فـحارس الموضوع يسمح للمستخدمين من المستوى 3 و4 بتحرير موضوع/منشور مقفل (المنشور رقم 1)، بينما حارس المنشور (انظر الكود أدناه) يمنع المستخدمين من المستوى 3 و4 من تحرير منشور غير رئيسي مقفل:
def can_edit_post?(post)
if Discourse.static_doc_topic_ids.include?(post.topic_id) && !is_admin?
return false
end
return true if is_admin?
# Must be staff to edit a locked post
return false if post.locked? && !is_staff?
@eviltrout هل هذا هو المقصود؟ في رأيي، سيكون من المنطقي أكثر (ومفيدًا كميزة للموضوعات المقفلة) لو أن حارس الموضوع يعمل بنفس الطريقة التي يحترم بها حارس المنشور حالة القفل. وكما ذكرت، أنا سعيد بأن يتمكن المستخدمون من المستوى 3 و4 من تحرير المنشورات غير المقفلة، لكن ليس المقفلة (ويشمل ذلك المنشور الأول).
لقد فعلت ذلك بالفعل. لكن مجرد النظر إلى كيف يتعامل كلا الحارسين مع حالة القفل بحد ذاته أمر محير.
يجب أن يكون الأمر على النحو الذي يتعامل به حارس المنشورات مع حالة القفل، أي: يجب أن يكون الموظف لتحرير منشور مقفل.
أقصد أنه حاليًا، المنشورات غير الأولى المقفلة مقفلة حقًا (لا يمكن للمستخدمين من المستوى 3 فما فوق تحريرها أو تعديلها)، بينما المنشورات الأصلية (OP) المقفلة ليست مقفلة على الإطلاق (باستثناء صاحب المنشور الأصلي، فلا يزال المستخدمون من المستوى 3 فما فوق قادرين على تحريرها أو تعديلها). هذا لا معنى له على الإطلاق بالنسبة لي، خاصةً لأن المستخدمين من المستوى 3 أو المستوى 4 لا يملكون صلاحية قفل منشور أو موضوع.
في ضوء ذلك، يجب أيضًا أن تكون المنشورات الأصلية المقفلة مقفلة حقًا بحيث لا يمكن للمستخدمين من المستوى 3 فما فوق تحريرها، رغم الإعداد الذي يسمح لهم بتحرير المنشورات والمواضيع (غير المقفلة).
نعم، إنها خطأ، ويجب على كلا الحارسين قفل المنشور فعليًا بغض النظر عن الموضع والإعداد الذي يسمح للمستخدمين من المستوى 3 والمستوى 4 بتحرير المنشورات. لقد بذلت قصارى جهدي لشرح الأمر بكل التفاصيل.