Babble: لا يمكن للمشرفين رؤية مجموعة مُعدّة لتكون مرئية فقط لمالك المجموعة

لقد واجهتُ هذا للتو في منتدى أديره. خطوات التكرار:

  1. إنشاء مجموعة جديدة بصفتك مسؤولًا
  2. تعيين الرؤية إلى “أصحاب المجموعة”
  3. إنشاء المجموعة
  4. العودة إلى /g
  5. لن تظهر المجموعة

إذا قمت بفحص وحدة التحكم باستخدام Group.find_by(name: <name>)، فستُرجع النتيجة بشكل صحيح. تغيير الرؤية إلى “أصحاب المجموعة والموظفون” يُرجع الرؤية بشكل صحيح.

ما لم يكن هذا التصميم مقصودًا، فإن افتراضي هو أنه حتى المسؤولين يجب أن يروا المجموعات عند مستوى هذه الرؤية (على الرغم من أن المشرفين لا يرون ذلك).

لم ألاحظ هذا السلوك حتى الترقية إلى الإصدار 2.4.0.beta2 أمس.

هل يساعد إعادة التحميل؟

لا، وحتى عند سحب نقطة النهاية JSON، لا يظهر الفريق كمسؤول.

عملتُ على هذا مؤخرًا، وسألقِي نظرة.

أجل. لم يكن يبدو من النوع الذي قد تغفل عنه، لكنه كان كل ما لدي. :wink:

لا يمكنني تكرار هذه المشكلة يا @justin. جربت ذلك محليًا وعلى خادم مستضاف عبر DO، وحاولت إنشاء مجموعة من حسابي إداريين مختلفين. في جميع الحالات، يرى المسؤولون جميع المجموعات.

غريب - سأحتاج إلى تجربته على تثبيت جديد. يمكنني بالتأكيد تكراره على مثيل إنتاجي أملكه. سأحاول تحديثه والمتابعة من هناك.

لقد جربت ذلك على تثبيت جديد وحصلت على نفس النتائج مثلك يا @pmusaraj. أعتقد أن المشكلة تكمن في أحد الإضافات التي أستخدمها. إذا اكتشفت ما الأمر، سأعود وأبلغكم.

لقد واجهتُ هذه المشكلة أيضًا…

هل تستخدم الإضافات أيضًا؟ أي منها (مع التركيز على تلك التي لا ينشئها Discourse ولا يوزعها) .. أم أنك تقول إن هذا تراجع جديد @justin؟

مرحبًا، لقد قمت للتو بتغيير وضعية رؤية مجموعة من “مالكي المجموعة” إلى “مالكي المجموعة والأعضاء” فأصبحت مرئية مرة أخرى. أتساءل هل هناك شيء غريب في الكود الخاص بإعدادات المجموعة عندما تكون الرؤية مقيدة بـ “مالكي المجموعة”؟

@outofthebox هل من قبيل الصدفة أن يكون لديك مكون إضافة دردشة Babble مثبتًا؟ يبدو أن هناك انتكاسة تتعلق بذلك بعد إزالته من مثيلتي. أدى إلغاء تثبيت مكون الإضافة هذا وإعادة بنائه إلى استعادة رؤية المجموعة.

اكتشاف رائع يا @justin، لقد ألقيت نظرة سريعة على كود مصدر Babble، ويبدو أن هناك تعارضًا مع تحديثاتي للمجموعات في النواة. يضيف Babble قاعدة ثابتة لـ visibility_level: 4، والتي تتعارض الآن مع مجموعة owners في النواة.

آمل أن يتسنى لـ @gdpelican تخصيص بعض الوقت للنظر في الأمر.

كيفية إصلاح هذا للإصدار الحالي من discourse؟
هل يجب أن أحذف هذا الكود؟ .where.not(visibility_level: 4)

  @@visible_group_scope = method(:visible_groups).clone
  scope :visible_groups, ->(user, order = nil, opts = {}) {
    @@visible_group_scope.call(user, order, opts)
  }
end

حسنًا، لقد غصت في هذه المشكلة بعمق أكبر.

يبدو أن babble قد خصصت visibility_level خاصة بها لاستخدامها، وأخذت الثابت غير المستخدم التالي (4).

قبل بضعة أسابيع، أضافت نواة Discourse visibility_level جديدة أيضًا، وأخذت الثابت غير المستخدم التالي، الذي كان 4 أيضًا. وهذا تسبب في استخدام مكرر لهذا الثابت.

لذلك سيتكون الإصلاح من جزأين:

  • تغيير visibility_level المستخدمة بواسطة babble. سيكون ذلك سهلاً. إذا أردنا القيام بذلك بشكل أنيق حقًا، فسوف نقوم بتسجيل كل ملحق خاص به BASE_VISIBILITY_LEVEL لتجنب التعارضات المستقبلية. ولكن حاليًا يمكننا ببساطة اختيار قيمة ما (على سبيل المثال 1001).
  • تغيير المجموعات ذات visibility_level 4 إلى الثابت الجديد - ولكن فقط المجموعات التي كانت تستخدم بواسطة babble.
    هل سيختار هذا الاستعلام المجموعات الصحيحة يا @gdpelican؟
UPDATE groups 
SET visibility_level = 1001 
WHERE id IN (
  SELECT g.id 
  FROM topics t 
  LEFT JOIN topic_allowed_groups tag ON tag.topic_id = t.id 
  LEFT JOIN groups g ON g.id = tag.group_id 
  WHERE t.archetype='chat');

مرحبًا، آسف. سألقي نظرة على هذا في الأيام القادمة، لكن مخططك العام للحل دقيق جدًا. سيكون الترحيح الخلفي هو الجزء الصعب، وسأقوم بمراجعته عن كثب قريبًا.

حسنًا، لقد دفعت إصلاحًا لهذه المشكلة. أخبرني إذا واجهت أي غرابة إضافية؟

وجدت مشكلة واحدة: يبدو أن وظيفة Backfiller تفتقر إلى دعم متعدد المواقع (تحتاج إلى التكرار عبر الاتصالات المتاحة)

@RGJ هل تود رفع طلب سحب (PR) لذلك؟ يمكنني دمجه، لكن سيكون اتصالي محدودًا خلال الأيام القليلة القادمة.

بالتأكيد، سأتمكن من القيام بذلك في عطلة نهاية الأسبوع.