الطريق نحو الاستقرار ثم الدوام لصلاحيات المجموعات الحبيبية، المجهولة والمُسجّلة

هذا الموضوع مرافق لموضوع Granular group-based permissions for anonymous and logged in users ، وهو قيد العمل (WIP).


لا تزال هناك عدة أماكن في قواعد بيانات الشيفرة المختلفة للنواة والإضافات والثيمات تشير مباشرةً إلى مجموعة everyone أو معرف المجموعة (0)، دون أخذ هذا التغيير القادم في الاعتبار، أو دون استخدام user.in_any_groups? أو طرق الحارس (guardian) المختلفة المستخدمة للتعامل مع ذلك.

للمرجع السريع، بعض معرفات المجموعات التلقائية:

  • 0 - everyone
  • 1 - admins
  • 2 - moderators
  • 3 - staff
  • 4 - anonymous_users
  • 5 - logged_in_users

يخدم هذا الموضوع كمكان مركزي لتتبع إصلاحات هذه المنظومة كلما اقتربنا من الإصدار المستقر. الإضافات والثيمات المخصصة لعملاء Discourse لا يتم تتبعها هنا، لدي قائمة داخلية منفصلة لهذا الغرض.

مشاكل ذات أولوية عالية

مشكلة أثيرت بواسطة Moin:

  • النواة (Core)
    • حول (About) - يُستخدم apply_excluded_groups فقط لإخفاء المشرفين والمديرين المحددين من المجموعات في about_page_hidden_groups. لا معنى لاستخدام مجموعات وهمية مثل 0|4|5 هنا، يجب إضافتها إلى disallowed_groups. نحتاج أيضًا إلى تحديث وصف الإعداد لأنه مضلل.
    • EditCategoryTabsController - في _wouldLoseAccess discourse/frontend/discourse/admin/controllers/edit-category/tabs.js at 86552acfbaf816db3b9db5f761f5e9f2bd221c21 · discourse/discourse · GitHub ننظر فقط إلى المجموعات المرئية، ويجب أن يكون هذا فحصًا من جانب الخادم (server-side check) مثل evaluate لصلاحيات الوصول (ACLs)

إضافات النواة (Core plugins)

  • قوالب Discourse (Discourse Templates)
      • ما زال can_use_private_templates? يشير إلى everyone مباشرةً ولا يستخدم اختصار _map في إعدادات الموقع.
  • ذكاء اصطناعي Discourse (Discourse AI)
      • can_see_summary? في امتدادات الحارس (guardian extensions) لا يستخدم user.in_any_groups?
      • can_attach? في AiBot::Playground لا يستخدم user.in_any_groups?
      • addTopicAdminMenuButton في ai-translation-topic-admin ينظر إلى currentUser.groups على العميل (client)، وهو أمر غير موثوق، قم بفحص من جانب الخادم لـ content_localization_allowed_groups بدلاً من ذلك
  • إسناد Discourse (Discourse Assign). الكثير من المشاكل هنا.
    • بدلاً من user_ids_in_groups في AssignmentPermissions، يجب علينا استخدام user_ids_in_groups
    • يجب أن تحتوي assign_allowed_on_groups على 0|4|5 في disallowed_groups، فلا معنى لأي منها هنا، فالمجموعات الفعلية هي الوحيدة المهمة.

إضافات أخرى

  • Activity Pub
    • إزالة الفحص على مستوى العميل (clientside checking) لـ user.groups وفحص everyone في showStatusToUser. تغيير activity_pub_post_status_visibility_groups ليكون الافتراضي 4|5.
  • التعديلات المقترحة (Suggested Edits)
    • يحتاج user_in_suggested_edits_group? إلى استخدام user.in_any_groups? في GuardianExtensions. أضف 1 إلى mandatory_groups لـ suggested_edits_review_groups وأزل الحالة الخاصة للمديرين في can_review_suggested_edits_in_topic_list
    • أضف 0|4|5 إلى disallowed_groups لكل من suggested_edits_review_groups و suggested_edits_suggest_groups، فهذا الإعداد ليس مقصودًا للاستخدام مع هذه المجموعات الوهمية حقًا
  • البث المباشر (Live)

الثيمات (Themes)

المكونات (Components)

مشاكل ذات أولوية منخفضة

  • النواة (Core)
    • is_in_edit_topic_groups في TopicGuardian يجب أن تستخدم امتداد _map للإعداد الخاص بالموقع
    • Roleable#whisperer? يجب أن تستخدم user.in_any_groups? والتخلص من فحص المديرين، وإضافة 1 إلى إعداد whispers_allowed_groups كـ mandatory_values
    • أضف 0|4 إلى disallowed_groups لإعداد الموقع allow_solved_in_groups، فهذا يتعامل مع الرسائل الخاصة فقط
    • أضف 0|4|5 إلى disallowed_groups لـ about_page_extra_groups، فهذا مخصص للتعامل مع المجموعات الفعلية فقط في صفحة “حول”
    • ملاحظة في can_view? لقناة الوجود (PresenceChannel) بأننا بحاجة إلى إزالة فحص Group::AUTO_GROUPS[:everyone] عندما ينتقل هذا التغيير القادم إلى الحالة الدائمة (Permanent)

إضافات النواة (Core plugins)

  • الدردشة (Chat)
    • ملاحظة بخصوص everyone_allowed في عدة أماكن في منطق الانضمام/المغادرة التلقائي للدردشة و users_with_unreads لإزالة فحص :everyone عندما ينتقل هذا التغيير القادم إلى الحالة الدائمة (Permanent)
    • تحديث chat_allowed_group_ids في Chat::Publisher لإزالة المجموعة الوهمية الخاصة، فبموجب FIX: Handle new pseudogroups in message bus group IDs - Pull Request #42610 - discourse/discourse - GitHub يمكن لـ MessageBus الآن التعامل مع المجموعات الوهمية بشكل صحيح
  • الإسناد (Assign)
    • التخلي عن add_model_callback(Group) في plugin.rb، فهو كود غير ذي صلة/معطل ينظر إلى أسماء المجموعات بدلاً من المعرفات

إضافات أخرى

  • مراجعة الشيفرة (Code Review)
    • فحص can_review_code? على code_review_allowed_groups لا يستخدم امتداد _map ولا يستخدم user.in_any_groups?. أضف 1 إلى mandatory_groups للإعداد والتخلص من فحص المديرين الخاص في الحارس (guardian). أضف 0|4|5 إلى disallowed_groups.
  • يحتاج إلى عناية (Needs Love)
    • فحص can_needs_love? على needs_love_allowed_groups لا يستخدم امتداد _map ولا يستخدم user.in_any_groups?. أضف 1 إلى mandatory_groups للإعداد والتخلص من فحص المديرين الخاص في الحارس (guardian). أضف 0|4|5 إلى disallowed_groups.
  • مستعار الموظفين (Staff Alias)
    • فحص can_post_as_staff_alias على staff_alias_allowed_groups لا يستخدم امتداد _map ولا يستخدم user.in_any_groups?. أضف 0|4|5 إلى disallowed_groups

الثيمات (Themes)

المكونات (Components)

الخطوات التالية للهجرة (Migration)

  • هجرة نموذج AiAgent الخاص بـ allowed_group_ids

تم هنا FIX: everyone pseudogroup roadmap part 1 - Pull Request #43798 - discourse/discourse - GitHub