هذا الموضوع مكمّل لموضوع 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-everyone1-admins2-moderators3-staff4-anonymous_users5-logged_in_users
يُعد هذا الموضوع مكانًا مركزيًا لتتبع إصلاحات هذا النظام مع اقترابنا من الإصدار المستقر. لا يتم تتبع الإضافات والسمات المخصصة لعملاء Discourse هنا، وسأحتفظ بقائمة منفصلة داخليًا لهذا الغرض.
مشاكل ذات أولوية عالية
المشكلة التي أثارها Moin:
- النواة (Core)
- حول - يُستخدم
apply_excluded_groupsفقط لإخفاء المشرفين والمديرين المحددين من المجموعات فيabout_page_hidden_groups. لا معنى لاستخدام المجموعات الوهمية (pseudogroups) مثل0|4|5هنا، يجب إضافتها إلىdisallowed_groups. نحتاج أيضًا إلى تحديث وصف الإعداد لأنه مضلل. - EditCategoryTabsController - في
_wouldLoseAccessdiscourse/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.
- إزالة الفحص من جانب العميل (clientside) لـ
- 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
- إزالة حيلة التحوّل (workaround) لـ
untargetable_group_idsفيpublic_room_message_bus_targetsلأن هذا عولج في FIX: Handle new pseudogroups in message bus group IDs (#42610) · discourse/discourse@699ad46 · GitHub - تغيير الافتراضي لـ
resenha_allowed_groupsمن0إلى4|5
- إزالة حيلة التحوّل (workaround) لـ
السمات (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)