الطريق نحو الاستقرار ثم الدوام لمجموعات granular_anonymous_and_logged_in_groups_permissions

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


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

للمرجع السريع، بعض معرّفات المجموعات التلقائية (auto group IDs):

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

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

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

المشكلة التي أثارها Moin:

  • النواة (Core)
    • حول - يُستخدم apply_excluded_groups فقط لإخفاء المشرفين والمديرين المحددين من المجموعات في about_page_hidden_groups. لا معنى لاستخدام المجموعات الوهمية (pseudogroups) مثل 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 Templates
      • لا يزال can_use_private_templates? يشير إلى everyone مباشرةً ولا يستخدم الاختصار _map في إعدادات الموقع.
  • 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 Assign. هناك الكثير من المشاكل هنا.
    • بدلاً من user_ids_in_groups في AssignmentPermissions، يجب أن نستخدم user_ids_in_groups
    • يجب أن يُضاف 0|4|5 إلى disallowed_groups في assign_allowed_on_groups، فليس لأي من هذه المجموعات معنى هنا، فالأهم هو المجموعات المادية (concrete groups) فقط.

إضافات أخرى (Other plugins)

  • Activity Pub
    • إزالة الفحص من جانب العميل (clientside) لـ showStatusToUser على user.groups وفحص everyone. تغيير 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، فهذا الإعداد غير مقصود للاستخدام مع هذه المجموعات الوهمية (pseudogroups) حقًا
  • Resenha

السمات (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، فهذا يتعامل مع الرسائل الخاصة (PMs) فقط
    • أضف 0|4|5 إلى disallowed_groups لـ about_page_extra_groups، فهذا مخصص للتعامل مع المجموعات المادية فقط في صفحة “حول”
    • ملاحظة في can_view? لـ PresenceChannel بأنه يجب علينا إزالة فحص Group::AUTO_GROUPS[:everyone] عندما ينتقل هذا التغيير القادم إلى الحالة Permanent

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

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

إضافات أخرى (Other plugins)

  • Code Review
    • فحص can_review_code? على code_review_allowed_groups لا يستخدم امتداد _map ولا يستخدم user.in_any_groups?. أضف 1 إلى mandatory_groups للإعداد والتخلص من فحص المديرين الخاص في الحارس. أضف 0|4|5 إلى disallowed_groups.
  • Needs Love
    • فحص can_needs_love? على needs_love_allowed_groups لا يستخدم امتداد _map ولا يستخدم user.in_any_groups?. أضف 1 إلى mandatory_groups للإعداد والتخلص من فحص المديرين الخاص في الحارس. أضف 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)

سيتم تحديدها لاحقًا (TBA)

إعجابَين (2)