إدارة المنصة
ما يراه فريق المنصة عبر كل مساحات العمل: الإيراد المتكرر وتصديره، والمؤسسات مع الإيقاف وإعادة التفعيل، والمستخدمون واستعادتهم، وفريق المنصة، وأدوار المنصة وإعداداتها، وما يستطيع مسؤول المنصة والدعم فعله.
لحزمة الحزمة الكاملة
من يستخدمها
- إدارة المنصة لمن يديرون المنتج، لا لأعضاء مساحة العمل. يكون الحساب من فريق المنصة عندما يحمل دورًا على المنصة؛ ولا علاقة لأدوار مساحة العمل بذلك.
- تُفتح في لوحة التحكم نفسها، في عمود شريط جانبي خاص بها. الحساب الذي يملك صلاحية على المنصة ومساحة عمل يرى إدارة المنصة أسفل الشريط الجانبي لمساحة العمل والعودة إلى مساحة العمل في شريط المنصة. أما أعضاء الفريق الذين لا مساحة عمل لهم فيصلون إلى نظرة المنصة العامة بعد تسجيل الدخول.
- يفحص كل مسار في المنصة صلاحيات حساب المنصة على الخادم، مهما عرضت الشاشة. والصفحة المفتوحة بدونها تقول «إدارة المنصة متاحة لطاقم المنصة فقط.»
الصفحات
| عنصر الشريط الجانبي | المسار | الصلاحية | وظيفته |
|---|---|---|---|
| نظرة عامة | /en/admin | platform.view | الإيراد الشهري المتكرر وتوزيع الخطط واتجاه الإيراد وأحدث المؤسسات، مع تصدير التقرير. |
| المؤسسات | /en/admin/organizations | organizations.view | كل مساحة عمل على المنصة مع خطتها ومقاعدها وحالتها؛ وتفاصيل كل منها؛ والإيقاف وإعادة التفعيل. |
| المستخدمين | /en/dashboard/users/all | users.view | كل حساب ومساحات العمل التي ينتمي إليها، مع الحسابات المحذوفة تحت المحذوفون. |
| الموظفون | /en/dashboard/admins-management | admins.view | الحسابات التي تحمل دورًا على المنصة، وأدوارها. |
| الأدوار | /en/dashboard/admins-roles | roles.view | ما يستطيع كل دور على المنصة فعله. |
| الإعدادات | /en/admin/settings | settings.view | إعدادات على مستوى المنصة كلها. |
يجد البحث في الشريط العلوي المؤسسات هنا.
مسؤول المنصة والدعم
| الدور | الحساب الأولي | الصلاحيات |
|---|---|---|
| مسؤول المنصة | platform@northstack.example (Riley Brooks) | الـ 21 كلها: كل صفحة وكل إجراء أدناه |
| الدعم | support@northstack.example (Dana Quinn) | platform.view وreports.export وorganizations.view وusers.view وadmins.view وroles.view وsettings.view: كل صفحات المنصة للقراءة فقط، وتصدير التقارير |
لا ينتمي أي من الحسابين إلى مساحة عمل. يعيد yarn seed الدورين إلى هاتين القائمتين بالضبط في كل مرة يعمل فيها، فأي تغيير أجريته عليهما في صفحة الأدوار يُلغى عند التشغيل التالي؛ أما الأدوار التي تنشئها بنفسك فتُترك. ويسرد دليل التثبيت بيانات الدخول.
نظرة المنصة العامة
- الإيراد الشهري المتكرر: كل مساحة عمل مدفوعة (نشطة أو متأخرة الدفع أو تنتهي قريبًا) بالسعر الشهري لخطتها، مع عدد مساحات العمل المدفوعة والتجارب والحسابات المتأخرة الدفع مع رابط إليها.
- توزيع الخطط: كم مساحة عمل مدفوعة على Starter وPro وScale.
- اتجاه الإيراد الشهري: نقطة لكل شهر. تحدد مدة التقرير (آخر 30 يومًا أو آخر 90 يومًا أو آخر 6 أشهر أو آخر 12 شهرًا، و6 أشهر افتراضيًا) عدد الأشهر المعروضة. تأتي الأشهر الماضية من جدول
mrr_snapshots، ويُحسب الشهر الحالي من مساحات العمل كما هي الآن. لا يكتب الأشهر الماضية إلا الـ seed: لا شيء يسجّل رقم الشهر عند إغلاقه، فعلى تثبيت حي لا ينمو الاتجاه إلا إذا خزّنت مهمتك الخاصة صفًا لكل شهر. - المؤسسات: أحدثها، مع مرشّحات الخطة والحالة والإجراءات نفسها الموجودة في صفحة المؤسسات.
- تصدير التقرير (
reports.export) ينزّل الملفnorthstack-organizations.csv: كل مؤسسة مع الحقولorganizationوidوplanوstatusوseatsوmrr_usdوcreated.
تُنشئ البيانات الأولية 732 مؤسسة لتتطابق الأرقام: 690 مدفوعة (480 على Starter و120 على Pro و90 على Scale)، منها 6 متأخرة الدفع، و42 في فترة تجريبية، مع خمسة أشهر سابقة من الإيرادات، فيعرض الاتجاه ست نقاط على الأكثر عند تهيئة جديدة.
المؤسسات
- تبحث القائمة في الأسماء والعناوين، وتصفّي بحسب الخطة والحالة (تجربة، نشط، متأخرة الدفع، تنتهي قريبًا، ملغاة، موقوفة)، بعشر مؤسسات في الصفحة، والأحدث تحديثًا أولًا.
- تعرض صفحة المؤسسة مالكها وخطتها وحالتها ومقاعدها ومنطقتها وعنوانها وبريد الفوترة وتاريخ التجديد، وطلبات API والتخزين، وأعضاءها مع أدوارهم، وآخر اثنتي عشرة فاتورة، وسجل الاشتراك، وأحداث المنصة الخاصة بها.
- إيقاف (
organizations.manage) يطلب سببًا ويُسجَّل في أحداث المنصة للمؤسسة. تحتفظ مساحة العمل الموقوفة بكل صلاحيات القراءة: يسجّل أعضاؤها الدخول ويرون بياناتهم، ويُرفض كل تغيير يحاولونه بالرمزworkspace_suspended. - إعادة التفعيل تعيدها إلى «نشط»، أو إلى «متأخرة الدفع» إذا كانت لديها فاتورة غير مدفوعة، ويُمسح السبب.
المستخدمين
- كل المستخدمين يعرض كل حساب مع مساحات عمله وأدواره ودوره على المنصة وتاريخ انضمامه، بعشرة في الصفحة. الدور يصفّي بحسب مالك مساحة عمل، مسؤول مساحة عمل، عضو مساحة عمل، الفوترة، فريق المنصة، أو بلا مساحة عمل.
- إنشاء مستخدم (
users.create) ينشئ حسابًا باسم وبريد إلكتروني وكلمة مرور من 8 أحرف على الأقل؛ لا يُرسل أي بريد، فشارك البيانات بطريقة آمنة. لا مساحة عمل للحساب حتى ينشئ واحدة أو يقبل دعوة. - تعديل وتغيير كلمة المرور يحتاجان إلى
users.update. تُرفض بالرمز 403 كلمة مرور أو بريد جديد لحساب يملك صلاحية منصة لا يملكها المنفّذ، مع الرسالة «يملك هذا الحساب صلاحيات منصة ليست لديك، لذلك لا يستطيع تغيير كلمة مروره أو بريده إلا مسؤول المنصة.» يستطيع مسؤول المنصة تغيير أي حساب، ويُحمى البريد لأن رابط إعادة تعيين كلمة المرور يُرسل إليه. - حذف (
users.delete) ينقل الحساب إلى المحذوفون: لا يستطيع تسجيل الدخول بعد ذلك. لا يمكن حذف حساب يملك مساحة عمل حتى يُجعل عضو آخر مالكًا لها. - استعادة (
users.restore) تعيد الحساب المحذوف مع عضوياته القديمة. تتضمن البيانات الأولية حسابًا محذوفًا واحدًا لتجربتها عليه.
الموظفون
- إضافة عضو (
admins.create) ينشئ حسابًا باسم وبريد إلكتروني وكلمة مرور تُكتب مرتين وأدوار المنصة. - تعديل يغيّر البيانات (
admins.edit)، مع الحماية نفسها لكلمة مرور حساب آخر وبريده كما في المستخدمين. أدوار المنصة تغيّر الأدوار (admins.assign_roles)؛ وعند عدم بقاء أي دور يخرج الشخص من قائمة الفريق ويحتفظ بحسابه. لا يمكن منح دور يملك صلاحية منصة لا يملكها المنفّذ ولا سحبه: «يملك هذا الدور صلاحيات منصة ليست لديك، لذلك لا تستطيع منحه أو سحبه.» - إزالة (
admins.delete) تحذف الحساب ووصوله إلى المنصة؛ ويمكن استعادته من المستخدمين، ثم المحذوفون. - تعرض صفحة عضو الفريق الصلاحيات التي تمنحها أدواره.
أدوار المنصة وصلاحياتها
يعرض /en/dashboard/admins-roles كل دور منصة عمودًا وكل صلاحية صفًّا، في ست مجموعات. إنشاء دور (roles.create) يضيف دورًا بلا صلاحيات؛ وإعادة التسمية (roles.edit) وحذف (roles.delete) في قائمة كل عمود؛ وتحديد الخانات وحفظ التغييرات يحتاجان إلى roles.assign_permissions، ولا تحفظ API إلا الصلاحيات التي يملكها المنفّذ نفسه، على دور لا يضم صلاحية ينقصه: «لا يمكنك منح دور إلا صلاحيات تملكها أنت، ولا تغيير إلا دورًا لا يضم صلاحية تنقصك.» لذلك لا يرفع أحد دوره، ولا دورًا أعلى منه. ترفض API حذف دور ما زال أحد يحمله. تُبقي لوحة التحكم عمود مسؤول المنصة مقفلًا بكل الصلاحيات، فيبقى في المنصة دائمًا من يديرها.
| المجموعة | الصلاحيات |
|---|---|
| النظرة العامة والتقارير | platform.view, reports.export |
| المؤسسات | organizations.view, organizations.manage |
| المستخدمين | users.view, users.create, users.update, users.delete, users.restore |
| الموظفون | admins.view, admins.create, admins.edit, admins.delete, admins.assign_roles |
| الأدوار | roles.view, roles.create, roles.edit, roles.delete, roles.assign_permissions |
| الإعدادات | settings.view, settings.edit |
القائمة معرّفة في back-end/src/database/seeders/platform-access.seeder.ts؛ وتضيف البيانات الأولية الأسماء الجديدة ويزيل ما لم يعد مدرجًا. يصل أي تغيير في صلاحيات دور أو في أدوار المنصة لشخص إلى عضو الفريق المسجّل دخوله فورًا، مع الإشعار «تم تحديث صلاحياتك».
إعدادات المنصة
يعرض /en/admin/settings إعدادات المنصة بحسب الفئة، مع بحث. تُعدَّل كل قيمة في مكانها، أو يُحذف الإعداد، بالصلاحية settings.edit؛ وتقرؤها settings.view.
| الإعداد | المفتاح | القيمة الأولية |
|---|---|---|
| اسم المنتج | site_name | Northstack |
| الشعار النصي | site_tagline | قالب انطلاق B2B SaaS |
| عنوان الدعم | support_email | عنوان من نطاق example |
| مرسل الإشعارات | notification_email | عنوان من نطاق example |
| وضع الصيانة | maintenance_mode | متوقف |
| التسجيلات الجديدة | signups_enabled | مفعّلة |
| مدة التجربة (بالأيام) | trial_days | 14 |
- إيقاف التسجيلات الجديدة يرفض تسجيل الاشتراك في لوحة التحكم وإنشاء مساحة عمل جديدة في الإعداد الأولي بالرمز 403، مع الرسالة «التسجيلات الجديدة مغلقة على هذه المنصة الآن.» تستمر الحسابات الحالية في تسجيل الدخول وقبول الدعوات، ويستطيع الفريق إنشاء حسابات من صفحة المستخدمين.
- مدة التجربة (بالأيام) هي المدة التي تجرّب فيها كل مساحة عمل جديدة، بدءًا من المساحة التالية التي تُنشأ. القيمة التي ليست عددًا صحيحًا من الأيام أكبر من الصفر تُحتسب 14.
- تشغيل وضع الصيانة يغلق المنتج أمام الجميع عدا فريق المنصة (الحسابات التي تملك
platform.view، مسؤول المنصة والدعم كما في البيانات الأولية). يرى الآخرون شاشة الصيانة في لوحة التحكم، «مغلق للصيانة.»، وتتحقق من نفسها تلقائيًا، وترد API على طلباتهم بالرمز 503. يسجّل الفريق الدخول كالمعتاد ويرى «وضع الصيانة مفعّل» مع رابط إلى هذه الإعدادات. يبقى نموذج الاتصال في الموقع وخروج الترخيص وخطاف Stripe وفحص السلامة مفتوحة. - يقرأ المساعد الذكي اسم المنتج وعنوان الدعم ووضع الصيانة ليجيب. أما الشعار النصي ومرسل الإشعارات فيُخزَّنان ويُعرضان هنا ليقرأهما كودك: لا ترسل API أي بريد باستخدامهما.
- يسري كل تغيير على الطلب التالي. يعيد
yarn seedهذه الإعدادات السبعة إلى قيمها الأولية، فيُلغى أي تغيير هنا عند تشغيله التالي، ويزيل أي إعداد آخر.
المسارات خلف هذه الصفحات
| المسار | الصلاحية |
|---|---|
GET /api/platform/overview?range=30d|90d|6m|12m | platform.view |
GET /api/platform/overview/export | reports.export |
GET /api/platform/organizations (search وplan وstatus وpage وlimit حتى 100)، GET /api/platform/organizations/:id | organizations.view |
POST /api/platform/organizations/:id/suspend (reason), POST /api/platform/organizations/:id/reactivate | organizations.manage |
GET /api/users, GET /api/users/deleted, GET /api/users/:username | users.view |
POST /api/users; PATCH /api/users/:username, PATCH /api/users/:username/change-password; DELETE /api/users/:username; POST /api/users/deleted/:username/restore | users.create; users.update; users.delete; users.restore |
/api/admins/* | admins.* |
/api/roles/* | roles.* |
GET /api/settings؛ وPATCH وDELETE /api/settings/:key | settings.view; settings.edit |
كيف يصل التغيير إلى الفريق المسجّل دخوله
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
الاتصال المباشر الذي يدفع تغيير دور المنصة إلى الفريق المسجّل دخوله.