لقد كنت أبحث عن مشكلتي عبر جوجل لعدة أسابيع بالفعل، وأنا على وشك الاستسلام.
الخلفية:
أقوم بتطوير وصيانة لوحة تحكم متعددة المستأجرين لناديات رياضية.
منتدى Discourse المستضاف ذاتيًا متاح فقط لأعضاء تلك الأندية. أود أن يكون متاحًا للجمهور. تكامل SSO الخاص بي يخصص تلقائيًا الاسم الكامل للمستخدم من قاعدة بياناتي إلى مستخدم Discourse بمجرد تسجيل الدخول.
المشكلة:
حاليًا لا يمكنني جعل المنتدى عامًا لأنه يجب أن يكون الاسم الكامل للمستخدم مرئيًا فقط لمستخدمين من نفس النادي.
خبرتي كمطور Ruby تساوي صفرًا (أنا مطور JS) ولكن حتى الآن تمكنت من فهم هذا الجزء من الكود:
# plugin.rb
after_initialize {
require_dependency 'basic_user_serializer'
require_dependency 'current_user'
class ::BasicUserSerializer
attributes :name
def name
# مجموعة ثابتة من أسماء المجموعات التي تشير إلى الانتماء لنادي
clubGroups = Array['foo', 'bar', 'baz']
# الجزء الذي لا أستطيع حله:
# عرض اسم المستخدم فقط إذا كان يشارك أحد مجموعات `clubGroups` الخاصة بالمستخدم الحالي المسجل،
# على سبيل المثال: أنا مسجل كمستخدم ينتمي إلى مجموعة 'bar'، مما يعني أنني أنتمي إلى نادي Bar. يجب أن أتمكن من رؤية أسماء المستخدمين الذين ينتمون أيضًا إلى مجموعة 'bar' فقط
???
end
end
}
لا أستطيع معرفة الأشياء التالية:
كيفية جلب مجموعات المستخدم الحالي
كيفية جلب مجموعات المستخدم المستهدف
بمجرد الحصول على ما سبق، يمكنني مقارنة المصفوفتين مع clubGroups واتخاذ قرار بشأن عرض اسم المستخدم أم لا.
التحدي الآخر بالنسبة لي سيكون إيقاف إمكانية تعديل اسمك الخاص، ولكن هذه قصة مختلفة.
عند محاولة جلب معرف المستخدم الحالي لتمريره إلى الاستعلام، لا أعرف حقًا كيف يمكنني جلبه.
عند التنقل إلى نموذج CurrentUser في الكود، الطريقة الوحيدة التي تبدو ذات صلة بمتطلباتي هي current_user، ولكن عندما أفعل هذا:
pp CurrentUser.current_user
يظهر لي الخطأ التالي:
undefined method `current_user' for CurrentUser:Module
أعتقد أنني بالتأكيد أفتقد بعض المعرفة الأساسية حول Ruby هنا، ولكن ربما يمكنك حلها لي بسهولة؟
قد ترغب في الاطلاع على كود هذا الملحق. فهو يضيف لمسة مميزة للصورة الرمزية للأشخاص المنتمين إلى نفس المجموعات، مما يمكنهم من التعرف على بعضهم البعض كأعضاء في المجموعة. هذا أمر مختلف، لكنه يتضمن الكود الذي يتحقق مما إذا كان المستخدم الذي يشاهد المنشور ينتمي إلى نفس المجموعة مثل المستخدم الذي نشره.