استخدام الذكاء الاصطناعي لإنشاء غلاف مخفي لمحتوى bbcode

باستخدام غلاف BBCode عام، قم بإنشاء مكون سمة يخفي المحتوى إذا لم يكن في متغير سلسلة المجموعة

عرض المسودات

إنشاء غلاف BBCode عام ومكون سمة
فهم المتطلبات
بناءً على طلبك، سنقوم بإنشاء:
غلاف BBCode عام يمكنه قبول سمات مخصصة.
مكون سمة يخفي المحتوى بناءً على متغير سلسلة المجموعة الذي تم تمريره إلى غلاف BBCode.
تنفيذ غلاف BBCode
سنقوم بإنشاء غلاف BBCode يمكنه قبول سمات اعتباطية. سيتم تمرير هذه السمات إلى مكون السمة للتقييم.

Ruby

# config/initializers/bbcode.rb
Discourse::Plugins::BBCode.add_parser(:hide_if_not_in_group) do |tag, content|
  attributes = tag.attributes || {}
  "<div class='hide-if-not-in-group' data-group-names='#{attributes[:groups]}'>#{content}</div>"
end

استخدم الكود بحذر.

إنشاء مكون السمة
سيتحقق مكون السمة مما إذا كان المستخدم الحالي ينتمي إلى أي من المجموعات المحددة في السمة data-group-names. إذا لم يكن كذلك، فسيقوم بإخفاء المحتوى.

JavaScript

// app/assets/javascripts/discourse/components/hide-if-not-in-group.js
import Component from 'discourse/components/component';

export default Component.extend({
  tagName: 'div',
  classNames: ['hide-if-not-in-group'],

  didInsertElement() {
    const currentUserId = Discourse.currentUser.id;
    const groupNames = this.element.dataset.groupNames.split(',');

    // Function to check if user is in any of the specified groups
    const userIsInAnyGroup = (userId, groupNames) => {
      // Replace this with your logic to check user group membership
      // For example, using Discourse's API or custom logic
      return groupNames.some(groupName => {
        // Check if user is in the group named `groupName`
        // Return true if the user is in the group, otherwise false
      });
    };

    if (!userIsInAnyGroup(currentUserId, groupNames)) {
      this.element.style.display = 'none';
    }
  }
});

استخدم الكود بحذر.

استخدام BBCode
يمكنك استخدام BBCode مثل هذا:

[hide_if_not_in_group groups="staff,moderators"]
This content is hidden for users who are not staff or moderators.
[/hide_if_not_in_group]

اعتبارات هامة
التحقق من عضوية المجموعة: استبدل منطق العنصر النائب للتحقق من عضوية مجموعة المستخدم بتنفيذك الفعلي. قد تحتاج إلى استخدام واجهة برمجة تطبيقات Discourse أو منطق مخصص لتحديد عضوية المجموعة.
الأداء: بالنسبة لعدد كبير من المستخدمين أو المجموعات، قد يكون تحسين التحقق من عضوية المجموعة ضروريًا.
الأمان: تأكد من التحقق من صحة أسماء المجموعات وتطهيرها بشكل صحيح لمنع الثغرات الأمنية.
المرونة: ضع في اعتبارك السماح بسمات إضافية لـ BBCode للتحكم في السلوكيات الأخرى (على سبيل المثال، عرض رسالة بدلاً من إخفاء المحتوى).
من خلال اتباع هذه الخطوات، سيكون لديك غلاف BBCode ومكون سمة مرنان يمكنه إخفاء المحتوى بناءً على عضوية المجموعة.


باستخدام Gemini. تمكنت من الحصول على مقتطفات الكود أعلاه. ومع ذلك، أواجه صعوبة في جعلها تعمل.

إذا كان بإمكان شخص ما إرشادي إلى مكان وضعها في مكون مخصص مع الأقسام للإدخال وإصلاح الكود إذا لزم الأمر.

أول خطأ ظهر عندما وضعت JavaScript في common كان خطأ في “import” حيث كان يتوقع {

Error Pic

إعجابَين (2)

هذا رائع جداً!
الشرط، الذي تعرفه على الأرجح، هو أن النص متاح بعدة طرق بما أنه مخفي بواسطة CSS. أحدها هو هذا المسار للمنشورات:

/posts/123/raw

إعجابَين (2)

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

إعجاب واحد (1)

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

آسف. لقد قرأت للتو أنه لا يمكنك جعله يعمل.

الشيء الذي يجب فعله هو استخدام سمة discourse لإنشاء سمة فارغة جديدة. ثم ابحث عن مكون سمة آخر يحتوي على قسم “يمتد المكون”… أوه. لا أعتقد أنه سيعمل. ستحتاج إلى رمزك لاستهداف وتعديل ما هو موجود بالفعل في dom. في الواقع، لست متأكدًا تمامًا من أن هذا صحيح، حيث لا أزال سيئًا جدًا في ذلك.

أعتقد أنه يمكنك القيام بذلك باستخدام css فقط إذا استخدمت هذا المكون الذي يضيف عضوية المجموعة إلى css.

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

إعجابَين (2)

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

إذا كنت لا تستخدم الهمسات على موقعك للإشراف، فربما يمكنك استخدام تلك الميزات المتاحة مباشرة؟

إعجابَين (2)

لن يكون التطبيق لهذا الأمر محورياً للأمان.

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

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

أي مكون، كما هو الحال مع تعديلات جانب العميل، ليس مخصصاً لاحتياجات الأمان بالطبع. حتى نص Tampermonkey يمكن استخدامه من قبل الأعضاء بشكل مشابه أو مطابق للمكونات ذات السمات/السمات.

قم بتوسيع هذه الفكرة أكثر ويمكنك من الناحية النظرية إخفاء المحتوى بناءً على الشارات وما إلى ذلك.

إعجاب واحد (1)

نعم. تعطيل هذا سيجعل الموظفين فقط هم من يمكنهم استخدام الوضع الآمن.

image

إعجابَين (2)