Построение многоарендного SaaS приложения: Полное руководство от дизайна до реализации
Узнайте, как эффективно создать многоарендное SaaS приложение с надежной аутентификацией, управлением организациями и контролем доступа на основе ролей всего за несколько часов.
Как создаются такие приложения, как Notion, Slack или Figma? Эти многоарендные SaaS приложения кажутся простыми в использовании, но построить одно самому? Это совершенно другая история.
Когда я впервые подумал о создании такой сложной штуки, мой разум взорвался:
- Пользователи нуждаются в нескольких вариантах входа (электронная почта, Google, GitHub)
- Каждый пользователь может создавать и принадлежать нескольким организациям
- Разные уровни прав доступа в каждой организации
- Корпоративные организации, требующие автоматического присоединения для определенных доменов электронной почты
- Требования MFA для чувствительных операций
- ...
"Босс, давайте поговорим о дизайне продукта через две недели. Я сейчас в тупике."
Но когда я начал работать над этим, я понял, что это не так сложно, как кажется.
Я просто построил систему со всеми этими функциями МЕНЬШЕ ЧЕМ ЗА 2 ЧАСА!
Я покажу вам, как точно спроектировать и реализовать такую систему с нуля - и вы будете поражены, насколько это просто в 2025 году с современными инструментами и правильным архитектурным подходом.
Полный исходный код доступен в конце этой статьи. Давайте углубимся!
Мы начнем с AI-документарного SaaS-продукта под названием DocuMind.
DocuMind - это AI-документационный SaaS-продукт, разработанный с многоарендной моделью для поддержки индивидуальных пользователей, малых предприятий и корпораций.
Платформа предоставляет мощные возможности AI для управления документами, включая автоматическое создание резюме, извлечение ключевых моментов и рекомендации по интеллектуальному содержанию внутри организаций.
Какие функции необходимы для SaaS-аутентификации и авторизации?
Сначала давайте рассмотрим необходимые требования. Какие функции вам нужны?
Многоарендная архитектура
Чтобы обеспечить многоарендную архитектуру, вам понадобится слой сущностей, называемый организацией. Представьте себе единый пул пользователей, которые могут получить доступ к нескольким рабочим пространствам. Каждая организация представляет рабочее пространство, и пользователи сохраняют единую идентичность, получая доступ к различным рабочим пространствам (организациям) на основе своих назначенных ролей.
Это широко используемая функция у поставщиков аутентификации. Организация в системе управления идентичности соответствует рабочему пространству вашей SaaS-программы, проекту или арендатору.
Членство
Участник - это временное понятие, используемое для указания статуса членства идентичности в организации.
Например, Сара регистрируется в вашем приложении, используя свою электронную почту, [email protected]. Она может принадлежать различным рабочим пространствам. Если Сара является частью Рабочее пространство A, но не Рабочее пространство B, она считается участником Рабочее пространство A, но не Рабочее пространство B.
Дизайн ролей и разрешений
В многоарендной архитектуре пользователям нужны роли с определенными разрешениями для доступа к ресурсам своего арендатора.
Разрешения - это детальный контроль доступа, который определяет конкретные действия, такие как read: order
или write: order
. Они определяют, какие действия могут быть выполнены с определенными ресурсами.
Роли - это набор разрешений, назначаемых участникам в многоарендной среде.
Вам нужно определить эти роли и разрешения, а затем назначить роли пользователям, и иногда это может включать автоматизированные процессы. Например:
- Пользователи, которые присоединяются к организации, автоматически получают роль участник.
- Первому пользователю, создавшему рабочее пространство, автоматически назначается роль администратор.
Поток регистрации и входа в систему
Обеспечьте удобный и безопасный процесс регистрации и аутентификации, включая базовые варианты входа в систему и регистрацию:
- Вход с электронной почтой и паролем: Традиционный метод входа в систему с использованием электронной почты и пароля.
- Вход без пароля: Использование проверочных кодов электронной почты для легкого и безопасного доступа.
- Управление учетной записью: Центр учетных записей, где пользователи могут обновить свою электронную почту, пароль и другие детали.
- Вход через социальные сети: Варианты, такие как Google и GitHub, для быстрого входа.
- Многофакторная аутентификация (MFA): Повышение безопасности, позволяя вход чер ез приложения-аутентификаторы, такие как Duo.
Создание арендатора и приглашение
В многоарендном SaaS-приложении ключевым отличием в потоке пользователей является необходимость поддерживать создание арендаторов и приглашение участников. Этот процесс требует тщательного планирования и реализации, так как он играет ключевую роль в активации продукта и его росте.
Вот несколько типичных сценариев использования, которые вам нужно учитывать:
Тип пользователя | Точка входа |
---|---|
Новая учетная запись | Введите с страницы входа и регистрации для создания нового арендатора |
Существующая учетная запись | Создайте еще одного арендатора внутри продукта |
Существующая учетная запись получила новое приглашение арендатора | Введите с страницы входа и регистрации |
Существующая учетная запись получила новое приглашение арендатора | Введите из приглашения по электронной почте |
Новая учетная запись получила новое приглашение арендатора | Введите с страницы входа и регистрации |
Новая учетная запись получила новое приглашение арендатора | Введите из приглашения по электронной почте |
Это обычные сценарии, встречающиеся почти в каждом SaaS-приложении. Используйте их как справочник для вдохновения вашей продуктовой и дизайнерской команды и не стесняйтесь создавать свои собственные потоки по мере необходимости.
Техническая архитектура и проектирование системы
Как только мы понимаем все требования к продукту, давайте перейдем к реализации.
Определение стратегии аутентификации
Аутентификация выглядит страшно. Пользователи нуждаются:
- Регистрация/вход с электронной почтой и паролем
- Однокликовый вход с Google/Github
- Сброс пароля, когда они забывают
- Корпоративный вход для клиентов
- ...
Реализация только этих базовых функций может занять недели разработки.
Но теперь нам не нужно самостоятельно создавать это!
Современные поставщики аутентификации (я выберу Logto на этот раз) упаковали все эти функции для нас. Процесс аутентификации выглядит просто:
От недель разработки до 15 минут настройки, Logto обрабатывает все сложные процессы за нас! Мы рассмотрим шаги интеграции в разделе реализации позже. Теперь мы можем сосредоточиться на создании основных функций DocuMind!
Установление многоарендной архитектуры
Система организаций позволяет пользователям создавать и присоединяться к нескольким организациям. Давайте разберемся в основных взаимоотношениях:
В этой системе каждый пользователь может принадлежать нескольким организациям, а каждая организация может иметь несколько участников.
Включение контроля доступа в многоарендном приложении
Ролевой контроль доступа (RBAC) важен для обеспечения безопасности и масштабируемости многоарендных SaaS-приложений.
В многоарендном приложении дизайн разрешений и ролей обычно согласован, поскольку он исходит из дизайна продукта. Например, в нескольких рабочих пространствах обычно есть роль администратора и роль участника. Logto как поставщик аутентификации имеет следующий организационный дизайн ролей и уровней доступа:
- Единые определения разрешений: Разрешения определяются на системном уровне и применяются последовательно ко всем организациям, обеспечивая удобное и согласованное управление разрешениями
- Шаблоны организаций: Предопределенные комбинации ролей и разрешений через шаблоны организаций, упрощая инициализацию организаций
Отношение разрешений выглядит следу ющим образом:
Поскольку каждому пользователю нужна своя роль(и) в каждой организации, отношение между ролями и организациями должно отражать роли, назначенные каждому пользователю:
Мы спроектировали систему организаций и систему контроля доступа, и теперь мы можем начать строить наш продукт!
Технический стек
Я выбрал удобный для начинающих, портативный стек:
- Frontend: React (легко переносимый на Vue/Angular/Svelte)
- Backend: Express (простая, интуитивно понятная API)
Почему разделение frontend и backend? Потому что это имеет четкую архитектуру, легко изучаемое и простое в переключении стека. И для поставщиков аутентификации я использую Logto в качестве примера.
И для следующих руководств, его шаблоны здесь работают с: Любым frontend, любым backend и любой системой аутентификации.
Добавление базового потока аутентификации в ваше приложение
Это самый простой шаг. Нам просто нужно инт егрировать Logto в наш проект. Затем мы можем настроить методы входа/регистрации пользователей в Консоли Logto в зависимости от наших нужд.
Установите Logto в ваше приложение
Сначала войдите в Logto Cloud. Вы можете зарегистрировать бесплатную учетную запись, если она у вас отсутствует. Создайте арендодателя для разработки для тестирования.
В Консоли арендатора нажмите кнопку "Приложение" слева. Затем выберите React, чтобы начать создавать наше приложение.
Следуйте инструкциям на странице. Вы можете завершить интеграцию Logto примерно за 5 минут!
Вот мой код интеграции:
Вот полезный трюк: наша страница входа имеет обе кнопки - "Войти" и "Зарегистрироваться". Кнопка "Зарегистрироваться" ведет прямо на страницу регистрации Logto. Это работает через функцию first screen Logto. Она определяет, какой шаг аутентификационного потока пользователи увидят первым.
Вы можете настроить по умолчанию на страницу регистрации, когда ваш продукт ожидает множество новых пользователей.
После нажатия на "Вход", вы попадете на страницу входа Logto. После успешного входа (или регистрации), поздравляем! В вашем приложении появился первый пользователь (вы)!
И вызовите функцию signOut
из хука useLogto
, чтобы выйти из системы, когда это нужно.
Настройка методов входа и регистрации
В Консоли Logto нажмите "Sign-in Experience" в левом меню. Затем нажмите вкладку "Sign-up and sign-in". На этой странице следуйте инструкциям для настройки методов входа/регистрации в Logto.
А поток входа будет выглядеть так: