كيفية حذف جميع المشاركات للمدير

أرغب في إلغاء صلاحيات المسؤول لحساب مستخدم واحد، لكن لا يوجد زر ‘إلغاء’. حسابات ‘الموظفين’ الأخرى في موقعي تحتوي على زر.

هل لديك أي فكرة عن السبب وكيفية الإصلاح، من فضلك؟

فقط نتأكد من أنك لا تحاول إلغاء صلاحية المسؤول عن الحساب الذي سجلت الدخول إليه حاليًا؟

لا، إنه حساب آخر… لقد سمّيته ‘Newsbot’، وقد استُخدم لاستيراد موجزات RSS.

أرغب الآن في إزالة تلك المنشورات.

هل توجد بريد الحساب الإلكتروني في ملف app.yml الخاص بك كمطور؟ أم أنك منحت أذونات المطور عبر وحدة التحكم؟

لا يمكن حذف المستخدمين المدرجين في ملف البناء .yml تحت قائمة DEVELOPERS من الواجهة الرسومية لأسباب أمنية:

 ## TODO: قائمة عناوين البريد الإلكتروني المفصولة بفواصل سيتم تعيينها كمسؤولين ومطورين
 ## عند التسجيل الأولي، مثال: 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'incredible_undeletables@myamazingdomain.com'

ستحتاج إلى إزالتهم من ملف البناء .yml وإعادة بناء النظام.

بدلاً من ذلك، ولكن غير موصى به وغير مدعوم (أفترض)، يمكنك تغيير حالة المسؤول (قيمة منطقية) في جدول users للمستخدم المعني إلى FALSE مباشرةً في قاعدة البيانات. ملاحظة: لم أقم بذلك قط (لم ألغِ أي صلاحيات، لكنني أضفت مشرفين بهذه الطريقة)، لكن القيام بأشياء كهذه (التلاعب مباشرة في قاعدة البيانات بأشياء غير مألوفة تمامًا لك) قد يؤدي إلى عواقب غير مقصودة، لذا لا يُنصح بذلك إلا إذا فشلت كل الخيارات الأخرى (وتأكد بنسبة 100% من وجود نسخة احتياطية عاملة من قاعدة البيانات قبل القيام بذلك!).

تحقق من ملف .yml الخاص بك… المشكلة على الأرجح موجودة هناك.

هذا المستخدم غير مدرج في ملف .yml الخاص بي.

من المحبط للغاية عندما يتم حتى إقصاء المشرفين عن ميزات الصيانة الأساسية في المنتدى.

في هذه الحالة، قد تحاول تجربة شيء مثل هذا مباشرة في قاعدة البيانات:

update users set admin = false where username = 'user_name_of_rouge_user';

حيث:

  • ‘user_name_of_rouge_user’ هي سلسلة نصية.

و:

  • false هي قيمة منطقية (boolean).

هذا ما سأفعله إذا كان لدي مستخدم غير مصرح به (rouge user) يتمتع بصلاحيات المسؤول، وأحتاج إلى سحب هذه الصلاحيات ولا أستطيع ذلك من لوحة الإدارة.

تخمين جريء — هل قمت بتخصيص Discobot وإعادة تسميته إلى Newsbot؟ يُعتبر البوت مستخدمًا للنظام، ولا يمكنك إلغاء صلاحيات المسؤول الخاصة به.

يمكنك التحقق مما إذا كان Newsbot هو بالفعل Discobot من خلال الانتقال إلى صفحة ملفه الشخصي والتحقق من بريده الإلكتروني:

سيظهر بريد البوت الإلكتروني باسم discobot_email.

نعم، هذا بالضبط ما قمنا به. تم استخدام ملف تعريف Discobot هذا لجلب خلاصات RSS، والتي نرغب الآن في إزالتها. يمكن أن يبقى الملف التعريفي، لكنني أريد فقط حذف جميع المنشورات/المواضيع.

لست مطورًا، لذا فإن الخطوات البسيطة ستكون محل تقدير كبير.

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

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

حسنًا. ما يلي سيسمح لك بحذف جميع منشورات مستخدم ما. ستحتاج إلى وصول إلى الخادم.

  1. اتصل بخادم Discourse عبر SSH.
  2. افتح وحدة تحكم Rails الخاصة بمثال Discourse.
    cd /var/www/discourse
    sudo ./launcher enter app
    rails c
    
  3. احصل على معرف (ID) المستخدم الذي تريد حذفه، ثم احذف جميع منشوراته. يفترض هذا الأمر أن اسم المستخدم هو newsbot، وإذا لم يكن كذلك، تأكد من تعديل الأمر:
    id = User.find_by_username('newsbot').id
    Post.where(user_id: id).each do |p|
      PostDestroyer.new(Discourse.system_user, p).destroy  
    end;