الطريق نحو استقرار ثم ثبات صلاحيات المجموعات الحبيبية (Granular) للمستخدمين المجهولين والمسجلين

هذا موضوع مكمّل لموضوع 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 ننظر فقط إلى المجموعات المرئية، ويجب أن يكون هذا فحصًا من جهة الخادم مثل evaluate لسيارات الوصول (ACLs)

إضافات النواة

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

إضافات أخرى

  • Activity Pub
    • إزالة الفحص من جهة العميل لـ 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، فهذا الإعداد ليس مقصودًا للاستخدام مع هذه المجموعات الوهمية
  • Resenha

قوالب

مكونات

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

  • النواة (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

إضافات النواة

  • الدردشة (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 للإعداد والتخلص من فحص الإداريين الخاص في الحارس. إضافة 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

قوالب

مكونات

الخطوات التالية للترحيل

  • ترحيل allowed_group_ids لنموذج AiAgent
3 إعجابات