بناء تطبيق SaaS متعدد المستأجرين: دليل كامل من التصميم إلى التنفيذ
تعلم كيفية بناء تطبيق SaaS متعدد المستأجرين بكفاءة مع مصادقة قوية وإدارة المؤسسات والتحكم في الوصول القائم على الأدوار في بضع ساعات فقط.
تعلم كيفية بناء تطبيق SaaS متعدد المستأجرين بكفاءة مع مصادقة قوية وإدارة المؤسسات والتحكم في الوصول القائم على الأدوار في بضع ساعات فقط.
كيف تُبنى التطبيقات مثل Notion أو Slack أو Figma؟ تبدو هذه التطبيقات متعددة المستأجرين بسيطة الاستخدام، لكن بناء واحد بنفسك؟ هذا أمر مختلف.
عندما فكرت لأول مرة في بناء مثل هذا الوحش المعقد، انفجر عقلي:
"رئيسي، دعونا نتحدث عن تصميم المنتج في غضون أسبوعين. أنا عالق في الوحل الآن."
لكن عندما بدأت العمل فعلياً عليه، وجدت أنه ليس مخيفًا كما يبدو.
لقد قمت فقط ** ببناء نظام بجميع هذه الميزات في أقل من ساعتين! **



سأشرح لك بالضبط كيف يمكنك تصميم وتنفيذ مثل هذا النظام من الأساس - وستدهش من مدى بساطته في عام 2025 باستخدام الأدوات الحديثة مع النهج المعماري الصحيح.
الكود المصدري الكامل متاح في نهاية هذه المقالة. لنبدأ!
سنبدأ بمنتج SaaS للتوثيق بالذكاء الاصطناعي يسمى DocuMind.
DocuMind هو منتج SaaS للتوثيق بالذكاء الاصطناعي تم تصميمه بنموذج متعدد المستأجرين لدعم المستخدمين الفرديين والشركات الصغيرة والمؤسسات.
تقدم المنصة قدرات ذكاء اصطناعي قوية لإدارة المستندات، بما في ذلك توليد الملخصات التلقائي، واستخراج النقاط الرئيسية، وتوصيات المحتوى الذكية داخل المنظمات.
أولاً، دعنا نراجع المتطلبات اللازمة. ما هي الميزات التي تحتاجها؟
لتمكين العمارة متعددة المستأجرين، ستحتاج إلى طبقة كيان تسمى المؤسسة. تخيل وجود مجموعة واحدة من المستخدمين الذين يمكنهم الوصول إلى مساحات عمل متعددة. تمثل كل مؤسسة مساحة عمل، ويحتفظ المستخدمون بهوية واحدة أثناء الوصول إلى مساحات العمل المختلفة (المؤسسات) بناءً على الأدوار المعينة لهم.
إنها ميزة مستخدمة على نطاق واسع في مقدمي خدمات المصادقة. تُعادل المؤسسة في نظام إدارة الهوية مساحة العمل أو المشروع أو المستأجر في تطبيق SaaS الخاص بك.

العضو هو مفهوم مؤقت يستخدم للإشارة إلى حالة عضوية الهوية داخل المؤسسة.
على سبيل المثال، تقوم سارة بالتسجيل في تطبيقك باستخدام بريدها الإلكتروني، [email protected]. يمكنها الانتماء إلى مساحات عمل مختلفة. إذا كانت سارة جزءًا من مساحة عمل أ وليس مساحة عمل ب، فهي تُعتبر عضوًا في مساحة عمل أ وليس مساحة عمل ب.
في العمارة متعددة المستأجرين، يحتاج المستخدمون إلى أدوار مع أذونات محددة للوصول إلى موارد المستأجر الخاصة بهم.
الأذونات هي ضوابط وصول مفصلة تحدد الإجراءات الخاصة، مثل read: order أو write: order. وهي تحدد ما يمكن فعله على الموارد المحددة.
الأدوار هي مجموعة من الأذونات المعينة للأعضاء في بيئة متعددة المستأجرين.
ستحتاج إلى تحديد هذه الأدوار والأذونات، ثم تعيين أدوار للمستخدمين، وأحيانًا يمكن أن تتضمن عمليات آلية. على سبيل المثال:
تأكد من وجود طريقة تسجيل ومصادقة سهلة الاستخدام وآمنة، بما في ذلك خيارات الدخول العادي والتسجيل:
في تطبيق SaaS متعدد المستأجرين، الفرق الرئيسي في تدفق المستخدم هو ضرورة دعم إنشاء المستأجر ودعوة الأعضاء. هذه العملية تتطلب تخطيطًا دقيقًا وتنفيذًا لأنها تلعب دورًا رئيسيًا في تفعيل المنتج ونموه.
فيما يلي بعض التدفقات النموذجية للدخول التي تحتاج إلى مراعاتها:
| نوع المستخدم | نقطة الدخول |
|---|---|
| حساب جديد | الدخول من صفحة تسجيل الدخول والتسجيل لإنشاء مستأجر جديد |
| حساب موجود | إنشاء مستأجر آخر داخل المنتج |
| الحساب الحالي تلقى دعوة لمستأجر جديد | الدخول من صفحة تسجيل الدخول والتسجيل |
| الحساب الحالي تلقى دعوة مستأجر جديد | الدخول من البريد الإلكتروني الدعوة |
| الحساب الجديد تلقى دعوة مستأجر جديد | الدخول من صفحة تسجيل الدخول والتسجيل |
| الحساب الجديد تلقى دعوة مستأجر جديد | الدخول من البريد الإلكتروني الدعوة |
هذه بعض السيناريوهات الشائعة الموجودة في كل تطبيق SaaS تقريبًا. استخدم تلك كمرجع لإلهام فريق المنتج والتصميم، ولا تتردد في إنشاء تدفقاتك الخاصة حسب الحاجة.






بمجرد أن نفهم جميع متطلبات المنتج، لننتقل إلى التنفيذ.
تبدو المصادقة مخيفة. يحتاج المستخدمون إلى:
تنفيذ مجرد هذه الميزات الأساسية قد يستغرق أسابيع من التطوير.
لكن الآن، لا نحتاج لبناء أي من هذا بأنفسنا!
مزودو المصادقة الحديثة (سأختار Logto هذا الوقت) قد قاموا بتجميع كل هذه الميزات لنا. تدفق المصادقة مباشر:
من أسابيع من التطوير إلى 15 دقيقة من الإعداد، Logto يتولى كل التدفقات المعقدة من أجلنا! سنغطي خطوات التكامل في قسم التنفيذ لاحقًا. الآن يمكننا التركيز على بناء الميزات الأساسية لDocuMind!
نظام المؤسسة يمكّن المستخدمين من إنشاء والانضمام إلى مؤسسات متعددة. دعونا نفهم العلاقات الأساسية:
في هذا النظام، يمكن لكل مستخدم الانتماء إلى مؤسسات متعددة، ويمكن لكل مؤسسة أن تضم أعضاء متعددين.
يعد التحكم في الوصول القائم على الأدوار (RBAC) مهمًا لضمان الأمان وقابلية التوسع في تطبيقات SaaS متعددة المستأجرين.
In a multi-tenant app, the design of permissions and roles is usually consistent, as it stems from the product design. For example, in multiple workspaces, there’s typically an admin role and a member role. Logto as an auth provider has the following organization-level role-based access control design:
تبدو علاقة الأذونات كما يلي:
Since each user needs their own role(s) within each organization, the relationship between roles and organizations must reflect the roles assigned to each user:
We've designed the organization system and access control system, and now we can start building our product!
اخترت تكديس بسيط ومتاح للمبتدئين:
لماذا فصل الواجهة الأمامية والخلفية؟ لأن لديها هيكل واضح، سهل التعلم وبسيط لتغيير التكديسات لأن مقدمي المصادقة، سأستخدم Logto كمثال.
وبالنسبة إلى الأدلة التالية، تعمل الأنماط هنا مع: أي واجهة أمامية، أي واجهة خلفية وأي نظام مصادقة.
هذه هي الخطوة الأسهل. نحتاج فقط إلى دمج Logto في مشروعنا. ثم يمكننا تكوين طرق تسجيل الدخول/التسجيل بناءً على احتياجاتنا في Console Logto.
أولاً، قم بتسجيل الدخول إلى Logto Cloud. يمكنك الاشتراك للحصول على حساب مجاني إذا لم يكن لديك واحد. أنشئ مستأجرًا للتطوير للاختبارات.
In the Tenant Console, اضغط على زر "Application" على اليسار. ثم اختر React لبدء بناء التطبيق الخاص بنا.
اتبع الدليل على الصفحة. يمكنك إكمال تكامل Logto في حوالي 5 دقائق!
Here's my integration code:

Here's a useful trick: Our login page has both Sign in and Register buttons. The Register button leads directly to Logto's registration page. This works through Logto's first screen feature. It determines which step of the auth flow users see first.
You can default to the registration page when your product expects many new users.
مبعد النقر على تسجيل الدخول، ستذهب إلى صفحة تسجيل الدخول في Logto. عند تسجيل الدخول بنجاح (أو التسجيل)، تهانينا! تطبيقك لديه أول مستخدم له (أنت)!
وقم باستدعاء وظيفة signOut من الخطاف useLogto لتسجيل خروج المستخدم عند الرغبة.
In the Logto Console, اضغط "تجربة تسجيل الدخول" في القائمة اليسرى. ثم اضغط على علامة التبويب "التسجيل وتسجيل الدخول".
On this page, اتبع التعليمات لتكوين طرق تسجيل الدخول/التسجيل في Logto.

And the sign-in flow will look like this:
With Logto, تمكين MFA بسيط. فقط اضغط على زر "Multi-factor auth" في Console Logto. ثم افعله في صفحة المصادقة متعددة العوامل.

And the MFA flow will look like this:


Everything is so simple! لقد جهزنا نظام مصادقة معقد للمستخدم في بضع دقائق فقط!
الأن لدينا أول مستخدم لدينا! ومع ذلك، لا ينتمي هذا المستخدم إلى أي منظمة حتى الآن، ولم نقم بإنشاء أي منظمات.
يوفر Logto دعمًا مدمجًا للطابع المتعدد.
Each user can get their organization information from Logto. This enables multi-tenancy support
للحصول على معلومات المنظمة للمستخدم من Logto، اتبع هاتين الخطوتين:
Declare organization information access in the Logto Config. يتم ذلك من خلال تعيين scopes و resources المناسبين.
استخدم طريقة fetchUserInfo الخاصة بـ Logto للحصول على معلومات المستخدم، بما في ذلك بيانات المنظمة.
بعد إتمام هذه الخطوات، تحتاج إلى تسجيل الخروج وتسجيل الدخول مرة أخرى. هذا ضروري لأننا قمنا بتغيير النطاق والموارد المطلوبة.
Right now, you haven't created any organizations. The user hasn't joined any organizations either. The dashboard will show "You don’t have any organization yet".

Next, we’ll create an organization for our users and add them to it.
Thanks to Logto, chúng tôi không cần phải xây dựng mối quan hệ tổ chức phức tạp. We just need to create an organization in Logto and add users to it. Logto xử lý toàn bộ phức tạp cho chúng tôi. Có hai cách để tạo tổ chức:
Click the "Organizations" menu button on the left side of the Logto Console. إنشاء منظمة.
الآن لديك أول منظمة لديك.

Next, let's add the user to this organization.
Go to the organization details page. Switch to the Members tab. Click the "+ Add member" button. Select your login user from the left list. Click the "Add members" button in the bottom right. Now you've successfully added the user to this organization.

Refresh your APP page. You'll see the user now belongs to an organization!

Creating an organization in the console is not enough. Your SaaS app needs a flow that allows end users to easily create and manage their own workspaces. لتطبيق هذه الميزة، استخدم Logto Management API.
For guidance, تحقق من وثيقة Interact with Management API لإعداد الاتصال مع Logto.
Let’s take organization creation flow as an example. Here's how the organization creation process works:
This flow has two key authentication requirements:
First, لنقم بإنشاء نقطة نهاية API في خدمة الخلفية الخاصة بنا لإنشاء المنظمات.
Our backend service API only allows authenticated users. We need to use Logto to protect our API. We also need to know the current user's information (like user ID).
In Logto's concept (and OAuth 2.0), our backend service acts as a resource server. Users access DocuMind resource server with an Access token from the frontend. يقوم الخادم الموارد بالتحقق من صحة هذا الرمز. If valid, it returns the requested resources.
لنقم بإنشاء مورد API لتمثيل خدمة الخلفية الخاصة بنا.
اذهب إلى Console Logto.
Don't worry about this API identifier URL. It's just a unique identifier for your API in Logto. It's not related to your actual backend service URL.
You'll see a tutorial for using the API resource. Bạn có thể theo dõi hướng dẫn đó hoặc các bước sau đây của chúng tôi.
لنقم بإنشاء مرشح requireAuth لحماية نقطة النهاية POST /organizations.
To use this middleware, we need these environment variables:
احصل على هذه المتغيرات من نقطة النهاية OpenID Configuration الخاصة بالمستأجر Logto الخاص بك. زر https://<your-tenant-id>.logto.app/oidc/.well-known/openid-configuration. ستجد المعلومات اللازمة في JSON المُعاد:
Now use the requireAuth middleware in our POST /organizations endpoint.
This protects our POST /organizations endpoint. chỉ những người dùng có mã thông báo truy cập Logto hợp lệ mới có thể truy cập nó.
لطالما، يمكننا الآن الحصول على الرمز من Logto في الواجهة الأمامية. يمكن للمستخدمين إنشاء منظمات من خلال خدمة الخلفية لدينا بهذا الرمز. يعطي المقر المكتبة أيضًا معرف المستخدم. هذا يأتي في المتناول عند إضافة المستخدمين إلى المنظمات.
Trong mã phía trước، khai báo tài nguyên API này trong cấu hình Logto. Thêm định danh của nó vào mảng tài nguyên.
كالشكل المعتاد، يحتاج المستخدمون إلى تسجيل الدخول مرة أخرى بعد تحديث تكوين Logto.
Trong bảng điều khiển، lấy mã thông báo truy cập Logto khi tạo tổ chức. Sử dụng mã thông báo này để truy cập API dịch vụ phụ trợ của chúng tôi.
الآن يمكننا الوصول بشكل صحيح إلى واجهة الخدمة الخلفية DocuMind API.
دعونا ننفذ إنشاء المنظمة باستخدام Logto Management API.
Như các yêu cầu frontend đến dịch vụ phụ trợ، các yêu cầu dịch vụ phụ trợ đến Logto cũng cần mã thông báo truy cập.
In Logto, نحن نستخدم مصادقة الآلة إلى الآلة للحصول على رموز الوصول. انظر Interact with Management API.
اذهب إلى صفحة التطبيقات في Logto Console. أنشئ تطبيق آلة إلى آلة. حدد دور "الوصول إلى API إدارة Logto". قم بنسخ نقطة النهاية Token، معرف التطبيق والسر الخاص بالتطبيق. سنستخدم هذه للحصول على رموز الوصول.

الآن يمكننا الحصول على رموز الوصول إلى Logto Management API من خلال هذا التطبيق M2M.
Sử dụng mã thông báo truy cập này để gọi Logto Management API.
Chúng tôi sẽ sử dụng các API Quản lý sau:
POST /api/organizations: إنشاء المنظمة (انظر إلى: Create organization API reference)POST /api/organizations/{id}/users: إضافة مستخدمين إلى المنظمة (انظر إلى: Add users to organization API reference)لقد قمنا الآن بتنفيذ إنشاء المنظمات عبر Logto Management API. يمكننا أيضًا إضافة مستخدمين إلى المنظمات.
Hãy kiểm tra tính năng này trong bảng điều khiển.

والنقر على “Create Organization”

الإنشاء ناجح!
The next step would be inviting users to an organization. لن نقوم بتطبيق هذه الميزة في البرنامج التعليمي لدينا بعد. Bạn đã biết cách sử dụng API Quản lý. Bạn có thể tham khảo mục này Tenant creation and invitation như tài liệu thiết kế sản phẩm và dễ dàng thực hiện tính năng này bằng cách làm theo bài viết trên blog này: How we implement user collaboration within a multi-tenant app. ")
الآن لننتقل إلى التحكم في الوصول للمؤسسات.
نحن نرغب في تحقيق:
دعونا نرى كيفية تنفيذ هذه الميزات.
Similar to the Logto access token we mentioned earlier, Logto issues an access token corresponding to a specific resource, and users use this token to access protected resources in the backend service. إن Logto يصدر رمز مؤسسة يطابق منظمة معينة، ويمكن للمستخدمين استخدام هذا الرمز للحصول على موارد المؤسسة المحمية في خدمة الخلفية.
استخدم طريقة getOrganizationToken الخاصة بـ Logto في تطبيق الواجهة الأمامية للحصول على رمز الوصول إلى منظمة محددة.
Here, organizationId يشير إلى معرف المنظمة التي ينتمي إليها المستخدم.
Before using getOrganization or any organization features, نحتاج إلى التأكد من أن النطاق urn:logto:scope:organizations والموارد urn:logto:resource:organization تشملها في Logto config. since we've already declared these earlier, we won't repeat it.
In our organization page, we use the organization token to fetch documents within the organization.
هناك نقطتان مهمتان يجب ملاحظتهما في هذا التنفيذ:
organizationId passed to getOrganizationToken ليس معرف منظمة ينتمي إلى المستخدم الحالي، فلن يتمكن من الحصول على رمز، مما يضمن للمستخدمين الوصول فقط إلى منظماتهم الخاصة.GET /documents لاحقًا).Next, we create واجهة برمجة تطبيقات (API) GET /documents في خدمة الخلفية لدينا. مشابهاً للنواة من خلال استخدام مورد API لحماية نقطة النهاية POST /organizations، نستخدم مؤشرات الموارد الخاصة بالمنظمة لحماية نقطة النهاية GET /documents.
أولاً، لنقم بإنشاء مرشح requireOrganizationAccess لحماية الموارد التنظيمية.
ثم نستخدم مرشح requireOrganizationAccess لحماية واجهة برمجة التطبيقات GET /documents.
بهذه الطريقة، قمنا بتنفيذ استخدام رموز المؤسسة للوصول إلى موارد المؤسسة. في خدمة الخلفية، يمكنك استرداد الموارد المقابلة من قاعدة البيانات بناءً على معرف المؤسسة.
Some software يتطلب عزل البيانات بين المنظمات. لمزيد من المناقشة والتنفيذ، يمكنك الرجوع إلى منشور المدونة: Multi-tenancy implementation with PostgreSQL: Learn through a simple real-world example.
لقد قمنا بتنفيذ استخدام رموز المؤسسة للوصول إلى موارد المؤسسة. التالي، سنقوم بتنفيذ التحكم في الأذونات للمستخدم ضمن المنظمات باستخدام RBAC.
لنفترض أن DocuMind لديها دورين: مدير ومتعاون.
يمكن للمديرين إنشاء والوصول إلى المستندات، بينما يمكن للمتعاونين الوصول إلى المستندات فقط.
لذلك، يجب أن تحتوي منظمتنا على هذين الدورين: مدير ومتعاون.
يمتلك المدير كلا من الأذونات read:documents و create:documents، بينما يمتلك المتعاون الإذن read:documents فقط.
read:documentscreate:documentsread:documentsهذا هو المكان الذي تأتي فيه ميزة قوالب المؤسسة لـ Logto.
قالب المؤسسة هو نموذج للتحكم في الوصول لكل مؤسسة: حيث يحدد الأدوار والأذونات التي تنطبق على جميع المنظمات.
لماذا قالب المؤسسة؟
لأن قابلية التوسع هي واحدة من أهم المتطلبات لمنتجات SaaS. بمعنى آخر، ما يعمل لعميل واحد يجب أن يعمل لجميع العملاء.
لنتوجه إلى Console Logto > قوالب المنظمات > أذونات المنظمات وننشئ إذنين: read:documents و create:documents.

ثم توجه إلى علامة تبويب أدوار المنظمات لإنشاء دورين للمستخدمين: مدير ومتعاون، وتعيين الأذونات المقابلة لهذه الأدوار.

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

الآن يمتلك مستخدمو المنظمة أدوارًا! يمكنك تحقيق هذه الخطوات عبر Logto Management API:
لدينا الآن التحكّم في الأذونات للمستخدمين عن طريق التحقق من أذوناتهم.
في الكود، cần làm cho mã thông báo tổ chức của người dùng mang thông tin cấp quyền, sau đó xác minh các quyền này trong phụ trợ.
في كود الواجهة الأمامية في تكوين Logto، cần إضافة الأذونات التي يحتاجها المستخدم لطلب داخل المنظمة. دعنا نضيف الأذونات read:documents و create:documents للنطاقات.
كالشكل المعتاد، بحاجة لتسجيل الدخول مرة أخرى مع المستخدم لتفعيل هذه التكوينات.
ثم في المكتبة requireOrganizationAccess في الخلفية، نضيف التحقق من أذونات المستخدم.
ثم إنشاء واجهة برمجة تطبيقات (API) POST /documents وتستخدم المرشح requireOrganizationAccess مع إعدادات الأذونات المطلوبة لحماية هذه الواجهة واجهة برمجة تطبيقات GET /documents السابقة.
بهذه الطريقة، قمنا بتنفيذ التحكم في إذن المستخدم عن طريق التحقق من أذونات المستخدمين.
في الواجهة الأمامية، يمكنك الحصول على معلومات إذن المستخدم عن طريق فك تشفير رمز المنظمة أو باستخدام طريقة getOrganizationTokenClaims الخاصة بـ Logto.
تحكم في العناصر على الصفحة بناءً على أذونات المستخدم عن طريق التحقق من النطاقات في المطالبات.
حتى الآن، لقد قمنا بتنفيذ الميزات الأساسية للمستخدمين والمنظمة في نظام SaaS متعدد المستأجرين! ومع ذلك، هناك بعض الميزات التي لم نغطيها بعد، مثل تخصيص العلامة التجارية لصفحة تسجيل الدخول لكل منظمة، وإضافة المستخدمين تلقائيًا مع عناوين البريد الإلكتروني الخاصة بنطاق معين إلى منظمات معينة، ودمج وظائف SSO على مستوى المؤسسة.
هذه كلها ميزات جاهزة للاستخدام، يمكنك العثور على مزيد من المعلومات حول هذه الميزات في وثائق Logto.
| الميزات | رابط الوثيقة |
|---|---|
| تكامل SSO على مستوى المؤسسة | https://docs.logto.io/end-user-flows/enterprise-sso |
| توفير المستخدم في الوقت المناسب (JIT) | https://docs.logto.io/organizations/just-in-time-provisioning |
| تكوين العلامة على مستوى المنظمة | https://docs.logto.io/customization/match-your-brand#organization-specific-branding |
| المصادقة متعددة العوامل على مستوى المنظمة (MFA) | https://docs.logto.io/organizations/organization-management#require-mfa-for-organization-members |
| إدارة على مستوى المنظمة: | https://docs.logto.io/end-user-flows/organization-experience/organization-management |
هل تتذكر كيف كان الاستهلاكي في البداية؟ المستخدمون، المنظمات، الأذونات، ميزات المؤسسة ... بدا وكأنه جبل لا ينتهي من التسلق.
لكن انظر إلى ما أنجزناه:
وأفضل جزء؟ لم يكن علينا إعادة اختراع العجلة. bằng cách tận dụng các công cụ hiện đại như Logto, chúng tôi chuyển những gì có thể đã là hàng tháng phát triển thành vấn đề của hàng giờ.
شفر المصدر الكامل لهذا البرنامج التعليمي متاح في: Multi-tenant SaaS Sample.
Đây là sức mạnh của phát triển hiện đại vào năm 2025 - chúng ta có thể tập trung vào xây dựng các tính năng sản phẩm độc đáo thay vì vật lộn với cơ sở hạ tầng. الآن حان دورك لبناء شيء رائع!
استكشف جميع ميزات Logto، từ Logto Cloud إلى Logto OSS، على Logto website أو اشترك في Logto cloud اليوم.