الرئيسية
» مسؤول الشبكة
»
إصلاح رسالة الخطأ "M_FORBIDDEN: ليس لديك إذن" في إدارة غرفة المصفوفة
إصلاح رسالة الخطأ "M_FORBIDDEN: ليس لديك إذن" في إدارة غرفة المصفوفة
عند محاولة تغيير إعدادات غرفة في نظام ماتريكس، أو إزالة مستخدم، أو حظر شخص ما، أو تعديل الصلاحيات، أو القيام بأي إجراء إداري آخر، قد تظهر لك M_FORBIDDEN: You do not have permissionرسالة خطأ. بالنسبة للمستخدمين الجدد، قد تكون هذه الرسالة مُربكة، لأن مصطلح "مسؤول" في ماتريكس يحمل معنيين مختلفين: مسؤول الخادم الذي يتحكم في الخادم الرئيسي، ومسؤول الغرفة الذي يمتلك صلاحيات كافية داخل غرفة محددة. هذان نظامان منفصلان للصلاحيات.
الحل الأمثل هو تحديد طبقة الصلاحيات التي منعت الإجراء قبل إجراء أي تغيير. يعتمد نظام تفويض غرف Matrix على مستويات الصلاحيات : وهي أرقام مُخزّنة في حالة الغرفة تُحدّد من يُمكنه دعوة الأعضاء، أو طردهم، أو حظرهم، أو تنقيح الرسائل، أو تغيير إعدادات الغرفة، أو تعديل مستويات الصلاحيات نفسها. تُحدّد مواصفات Matrix الحالية هذه القواعد في مواصفات واجهة برمجة تطبيقات Matrix للعميل والخادم . وتُوثّق Synapse بشكل منفصل أن مسؤول الخادم يختلف عن مسؤول الغرفة في وثائق واجهة برمجة تطبيقات Synapse للإدارة .
تعني الاستجابة M_FORBIDDENأن الخادم المنزلي رفض الإجراء المطلوب. ويعتمد السبب الدقيق على الإجراء وحالة العضوية ومستويات طاقة الغرفة.
قبل أن تُغير أي شيء: اعرف القيم الأربع المهمة
تحتاج عادةً إلى أربع معلومات:
معرف مستخدم المصفوفة الخاص بك ، على سبيل المثال @alice:example.com.
على سبيل المثال، معرّف الغرفة!abc123:example.com . اسم الغرفة المستعار #team:example.comأسهل في القراءة، لكن العديد من واجهات برمجة التطبيقات تعمل على معرّف الغرفة الداخلي.
حالة عضويتك . في معظم الحالات، يجب أن تكون منضمًا إلى الغرفة قبل أن تتمكن من القيام بإجراءات إدارة الغرفة.
مستوى قوتك والمستوى المطلوب للفعل .
في Element Web أو سطح المكتب، يمكنك العثور على مُعرّف الغرفة وإصدارها في إعدادات الغرفة ضمن خيارات متقدمة. كما تُشير وثائق Element الحالية إلى أن إدارة الغرف موجودة ضمن إعدادات الغرفة ← الأدوار والصلاحيات . راجع دليل إعدادات الغرفة في Element .
الخطوة الأولى: تأكد من أنك متصل بالغرفة بالفعل
يُفرّق نظام ماتريكس بين عدة حالات عضوية، منها المدعو، والمنضم، والمغادر، والمحظور. يحتاج المستخدم عادةً إلى joinحالة العضوية لإرسال أحداث الغرفة أو إدارتها. وهذا مهم لأن حساب مدير الخادم الرئيسي قد يفشل في تنفيذ إجراء عادي في الغرفة إذا لم يكن هذا الحساب مشاركًا فيها.
إذا كنت تستخدم عميل Matrix مثل Element، فافتح الغرفة وتأكد من ظهورها كغرفة نشطة انضممت إليها، وليس مجرد دعوة أو غرفة قديمة. إذا كنت تدير Synapse وتحتاج إلى مسار استعادة مسؤول الخادم، فإن Synapse يوفر نقطة نهاية إدارية لإضافة مستخدم محلي إلى غرفة، ولكنه لا يزال يوثق متطلبات الأذونات المتعلقة بهذه العملية. راجع إدارة عضوية غرف Synapse .
تجنب هذا الخطأ: لا تفترض أن امتلاك رمز Synapse Admin API يمنحك تلقائيًا نفس صلاحيات إدارة الغرفة. إدارة الخادم وإدارة الغرفة أمران منفصلان عمدًا.
الخطوة الثانية: تحقق من دورك ومستوى الطاقة المطلوب للإجراء
يعرض Element مستويات الصلاحيات الشائعة على شكل أدوار مألوفة مثل عضو، ومشرف، ومدير. في الواقع، يُقيّم Matrix الأرقام بدلاً من التصنيفات. توصي مواصفات Matrix بالتفسير المألوف للمستخدمين العاديين الذين تقل صلاحياتهم عن عتبة الحدث، والمشرفين الذين تزيد صلاحياتهم عن تلك العتبة، والمديرين الذين تبلغ صلاحياتهم مستوى التحرير أو أعلى منه m.room.power_levels. تستخدم الغرف النموذجية عادةً 0 للأعضاء، و50 للمشرفين، و100 للمديرين، ولكن يمكن تخصيص هذه القيم.
تُعدّ تسميات العملاء، مثل "المسؤول" و"المشرف"، عرضًا واضحًا لمستويات صلاحيات Matrix. تأكد دائمًا من فحص صلاحيات الغرفة الفعلية، لأن الغرف المخصصة قد تستخدم عتبات مختلفة.
افتح إعدادات الغرفة ← الأدوار والصلاحيات . تحقق من دورك والإجراء الذي تحاول تنفيذه. توضح وثائق Element الحالية الإجراءات الشائعة مثل تغيير الإعدادات، وإزالة المستخدمين، وحظر المستخدمين، وتغيير مستوى رؤية السجل، وتغيير الصلاحيات، ولكل منها مستوى صلاحيات خاص به.
على سبيل المثال، لنفترض أن حسابك يمتلك مستوى قوة 50، وأن الغرفة تتطلب مستوى قوة 100 لتغيير الصلاحيات. يمكنك الاستمرار في إدارة حسابك والقيام ببعض المهام الإدارية، ولكن محاولة تعديل نموذج الصلاحيات ستؤدي إلى ظهور رسالة خطأ M_FORBIDDEN.
الخطوة 3: تحقق من المستخدم المستهدف وكذلك من صلاحياتك الخاصة
هذه إحدى قواعد المصفوفة التي يسهل إغفالها. ففي عمليات الطرد والحظر، لا يكفي الوصول إلى الحد الأدنى المطلوب دائمًا. كما تشترط قواعد تفويض المصفوفة أن يكون مستوى صلاحيات المستخدم المستهدف أقل من مستوى صلاحيات الشخص الذي يقوم بالإجراء.
مثال: حسابك في المستوى ٥٠، والحد الأدنى للمستوى المطلوب في الغرفة kickهو ٥٠، ومشرف آخر في المستوى ٥٠ أيضًا. أنت تستوفي الحد الأدنى المطلوب للطرد، لكنك لا تزال غير قادر على طرد المشرف الذي في نفس مستواك. قواعد الصلاحيات ترفض العملية لأن المستوى المستهدف ليس أدنى منك.
يتم تقييم الصلاحيات بناءً على كل إجراء. يمكن السماح للمستخدم بدعوة الأعضاء أو إرسال الرسائل، مع أنه لا يزال يفتقر إلى المستوى المطلوب لتغيير إعدادات الغرفة أو إدارة مستخدم آخر ذي صلاحيات.
يُفسر هذا المبدأ نفسه العديد من حالات فشل الإشراف المُربكة. ينبغي على مُدير الغرفة فحص كلا جانبي المقارنة:
مستوى طاقتك الحالي.
المطلوب kickأو banالحد الأدنى.
مستوى الطاقة الحالي للمستخدم المستهدف.
إذا كان المستخدم المستهدف مسؤولاً من نفس المستوى، فلا يمكن لمسؤول آخر من نفس المستوى عادةً إزالة صلاحياته ببساطة. وتحذر وثائق إدارة الغرف المتقدمة في Element صراحةً من أنه لا يمكن للمسؤولين إزالة صلاحيات المسؤول من مسؤولين آخرين في سير عمل العميل العادي. راجع قسم إدارة الغرف المتقدمة في Element .
الخطوة الرابعة: استخدم مسؤول غرفة موجودًا عند توفره
أسهل طريقة للتعافي عادةً ما تكون تنظيمية وليست تقنية. إذا كان هناك مسؤول غرفة نشط آخر يتمتع بصلاحيات كافية، فاطلب منه ترقية حسابك المشترك من خلال إعدادات الغرفة ← الأدوار والصلاحيات .
يُفضّل هذا على تعديل حالة الغرفة يدويًا، لأن العميل يعرض نموذج الدور الحالي ويطبق قواعد التفويض نفسها المطبقة على أي عميل آخر في نظام ماتريكس. بعد الترقية، أعد محاولة الإجراء الأصلي.
إذا استمرت المشكلة، قارن الإجراء المحدد بحدود الصلاحيات بدلاً من افتراض أن "المسؤول" يعني السماح بكل إجراء تلقائيًا. يمكن لأحداث مستوى الطاقة المخصصة تعيين حدود غير اعتيادية لأنواع أحداث محددة.
الخطوة 5: إذا لم يتبق أي مسؤول غرفة قابل للاستخدام، فقم بالاستعادة من خلال Synapse
إذا كنت تدير خادم Synapse المنزلي، وتم ترك غرفة بدون مسؤول نشط، فاستخدم واجهات برمجة تطبيقات الاسترداد المدعومة من Synapse بدلاً من تعديل قاعدة البيانات أو إنشاء أحداث الغرفة. يوفر Synapse واجهة برمجة تطبيقات لإنشاء مسؤول غرفة .
POST /_synapse/admin/v1/rooms/<room_id_or_alias>/make_room_admin
{
"user_id": "@alice:example.com"
}
قم بمصادقة هذا الطلب باستخدام رمز الوصول الخاص بمسؤول خادم Synapse . تتوفر وثائق واجهة برمجة تطبيقات إدارة الغرف الرسمية على Synapse Rooms Admin API . تمنح نقطة النهاية المستخدم المحلي المُختار أعلى صلاحيات متاحة له في تلك الغرفة؛ ويمكنها، عند الضرورة والإمكان، دعوة هذا المستخدم أولاً.
يمكن لمسؤول الخادم المنزلي استخدام واجهات برمجة تطبيقات الغرف المدعومة من Synapse لتحديد الغرفة المتأثرة واستعادة إدارة الغرفة عندما لا يتبقى مسؤول غرفة مناسب.
بعد مكالمة الاسترداد، انضم إلى الغرفة أو أعد فتحها باستخدام الحساب الذي تمت ترقيته وحاول تنفيذ الإجراء مرة أخرى في عميل Matrix.
حالة خاصة: إصدار الغرفة 12 والإصدارات الأحدث
يُغيّر الإصدار 12 من غرفة المصفوفة طريقة تمثيل المُنشئين. يتمتع المُنشئ بمستوى قوة غير محدود وغير قابل للتغيير، ولا يُدرج في الخريطة كأي مستخدم عادي users. m.room.power_levelsلا يُمكن تخفيض رتبة المُنشئ عبر حدث عادي لمستوى القوة. هذا السلوك موثق في مواصفات الإصدار 12 من غرفة المصفوفة .
هذا يعني أن أسلوب استكشاف الأخطاء وإصلاحها المنسوخ من إصدار أقدم من الغرفة قد لا ينطبق دون تغيير على إصدار الغرفة 12. تحقق من إصدار الغرفة قبل محاولة إجراء عمليات استعادة متقدمة أو تعديلات على مستوى الطاقة.
كيفية فحص مستويات الطاقة مباشرة
لأغراض استكشاف الأخطاء وإصلاحها المتقدمة، فإن حدث حالة الغرفة ذي الصلة هو m.room.power_levels. يحتوي على حقول مثل:
إذا لم يكن حسابك مدرجًا ضمن القائمة users، فسيعود مستواه عادةً إلى المستوى الافتراضي users_default. بالنسبة لمعظم الغرف، يعني هذا المستوى 0. كما يمكن لأنواع أحداث محددة أن تتجاوز عتبات الحالة العامة أو عتبات الرسائل عبر eventsالخريطة.
لا تستبدل حدث مستوى الطاقة بالكامل بجزء صغير منه إلا إذا كنت متأكدًا تمامًا مما سيحتفظ به العميل أو واجهة برمجة التطبيقات. قد تحتوي حالة مستوى الطاقة على عدة حقول مهمة، وقد يؤدي حذفها عن طريق الخطأ إلى تغيير صلاحيات أكثر مما هو مطلوب.
ما لا يجب فعله
لا تقم بترقية حساب Synapse إلى مسؤول خادم لمجرد حل مشكلة بسيطة تتعلق بأدوار الغرف. استخدم أقل صلاحيات ممكنة.
لا تقم بتعديل سجلات قاعدة بيانات Synapse لتغيير مستويات طاقة الغرفة. يتم تمثيل تفويض الغرفة من خلال أحداث الغرفة الموقعة، وليس مجرد علامة مستخدم في قاعدة البيانات.
لا تقم بإعادة تشغيل Synapse كحل روتيني للمشكلة M_FORBIDDEN. عادةً ما تكون حالات فشل المصادقة ناتجة عن قرارات حتمية متعلقة بحالة الغرفة، وليست مشاكل متعلقة بالعمليات القديمة.
لا تفترض أن مسح ذاكرة التخزين المؤقت للعميل يغير الأذونات. يقوم الخادم الرئيسي بتطبيق قاعدة التفويض.
لا تكشف عن رموز الوصول في سجل الأوامر، أو لقطات الشاشة، أو تذاكر الدعم، أو عناوين المواقع الإلكترونية. يُفضّل استخدام Authorization: Bearer ...ترويسة عند استخدام واجهات برمجة التطبيقات (APIs).
جدول التشخيص السريع
ما تراه
على الأرجح تحقق
الخطوة التالية
M_FORBIDDENعند تغيير إعدادات الغرفة
مستواك مقابل مستوى الحدث أو الإعدادات المطلوب
اطلب من مسؤول غرفة يتمتع بصلاحيات كافية أن يرقيك أو أن يعدل الحد الأدنى.
M_FORBIDDENعند الطرد أو الحظر
عتبة الإجراء ومستوى المستخدم المستهدف
يجب أن يستوفي مستواك الحد الأدنى وأن يتجاوز مستوى المستخدم المستهدف.
لا يستطيع مسؤول الخادم إدارة الغرفة في العميل
الفرق بين مسؤول الخادم ومسؤول الغرفة
انضم إلى الغرفة واستخدم make_room_adminواجهة برمجة تطبيقات الاسترداد المدعومة إذا كان ذلك مناسبًا.
لم يتبق أي مسؤول غرفة نشط
مسار استعادة المشبك العصبي
استخدم واجهة برمجة تطبيقات إدارة الغرف مع رمز مسؤول الخادم.
تختلف التعليمات القديمة في طريقة عملها.
نسخة الغرفة
تحقق مما إذا كانت الغرفة من الإصدار 12 أو أحدث قبل تعديل مستويات الطاقة.
التحقق النهائي
يكتمل الإصلاح عند انضمام الحساب المسؤول عن إدارة الغرفة، وامتلاكه مستوى صلاحيات كافيًا للإجراء المطلوب، وقدرته على تنفيذ هذا الإجراء دون M_FORBIDDENتلقي رد خطأ 403. بالنسبة لإجراءات الإشراف، تحقق أيضًا من أن مستوى صلاحيات المستخدم المستهدف أقل عندما تتطلب قواعد تفويض المصفوفة ذلك.
بالنسبة لمسؤول نظام ماتريكس الجديد، فإن النموذج الذهني الأمثل بسيط: أولاً، حدد ما إذا كنت تتعامل مع صلاحيات الخادم الرئيسي أو صلاحيات الغرفة . ثم افحص العضوية، ومستوى صلاحياتك، وعتبة الإجراءات، ومستوى المستخدم المستهدف. هذا التسلسل يحل معظم أخطاء الصلاحيات دون الحاجة إلى تغييرات غير ضرورية في الخادم.