• saas
  • совместная работа
  • организации
  • rbac
  • многопользовательский

За кулисами: Как мы реализуем взаимодействие пользователей в многопользовательском приложении

Практики и инсайты по реализации функции приглашений и управления доступом по ролям, таких как совместная работа в Logto Cloud, в многопользовательском приложении.

Charles
Charles
Developer

Предыстория

На прошлой неделе мы представили функцию совместной работы в Logto Cloud. Если ты пропустил, обязательно взгляни! Теперь ты можешь приглашать коллег и соработников в существующие Logto тенанты, совместно работая над поддержанием идентификационной системы для твоих приложений.

В этом выпуске функции мы добавили две роли для каждого Logto тенанта:

  • Админ: Полный доступ к тенанту, включая управление ресурсами, связанными с идентификацией, приглашение и управление другими участниками, обработку оплаты и просмотр истории оплат.
  • Сотрудник: Может управлять ресурсами, связанными с идентификацией, но не имеет доступа к другим функциям администрирования.

В соответствии с нашим обязательством использовать собственные инструменты, мы использовали наш RBAC (Role-Based Access Control) и Организации для построения взаимодействия пользователей. Если ты новичок в RBAC, ознакомься с нашим предыдущим постом, чтобы начать.

В этом посте блога давайте посмотрим, что было сделано для реализации этой функции и как эти практики могут быть полезны, если ты разрабатываешь приложения для нескольких организаций.

Совместная работа в Logto Cloud построена на основе Организаций Logto

Каждый тенант Logto Cloud функционирует как независимая организация в нашей системе, благодаря функции Организаций. Чтобы ввести роли администратора и сотрудника, мы создали две роли организации в шаблоне организации, для каждой из которых назначен определённый набор прав организации.

Роли организации
Права организации

Управление приглашениями с помощью Logto Management API

Мы предоставили набор API для управления приглашениями в функции организаций. С помощью этих API ты можешь, например:

  • POST /api/organization-invitations создать и отправить приглашение в организацию на адрес электронной почты
  • GET /api/organization-invitations и GET /api/organization-invitations/{id} получить свои приглашения
  • PUT /api/organization-invitations/{id}/status принять или отклонить приглашение, изменив его статус

Для получения более подробной информации см. полную документацию API.

Подключись к своему email-коннектору

Так как приглашения отправляются по электронной почте, убедись, что твой email-коннектор правильно настроен. В этом выпуске мы представили новый тип использования шаблона электронной почты, OrganizationInvitation, который позволяет настраивать шаблон письма-приглашения.

Пример письма-приглашения

Этот шаблон по умолчанию принимает переменную {{link}}, которая является ссылкой на целевую страницу Logto Console, где пользователи могут принять приглашение и присоединиться к тенанту Logto. Одна из целевых страниц в Logto Cloud выглядит как показано на следующем снимке экрана:

Целевая страница приглашения

См. документацию API для получения подробной информации о том, как отправлять письмо-приглашение через Management API.

Используй RBAC для управления разрешениями пользователей

С помощью вышеперечисленных настроек мы можем отправлять приглашения по электронной почте, и приглашенные пользователи могут присоединяться к организации с назначенной ролью.

Пользователи с разными ролями в организации будут иметь разные области (разрешения) в своих токенах доступа. Таким образом, как клиентское приложение (Logto Console), так и наши серверные службы должны проверять эти области для определения доступных функций и разрешенных действий.

Хорошо, кажется, что всё связано, но чего ещё не хватает?

Управление обновлениями областей в токенах доступа

Управление обновлениями областей в токенах доступа включает:

  • Отзыв существующих областей: Например, понижение админа до сотрудника автоматически уменьшает области в новом токене доступа, полученном с уже имеющимся рефреш-токеном.
  • Предоставление новых областей: Напротив, продвижение пользователя до админа требует запуска процесса повторного входа или повторного согласия, чтобы отразить изменение в токенах доступа пользователя.

В Logto Cloud Console активно проверяет области пользователей с помощью SWR запросов, и мы автоматически предоставляем согласие всякий раз, когда пользователь повышается до админа.

Если ты реализуешь аналогичную функцию с использованием RBAC, тебе понадобится механизм (например, WebSocket или серверные push-события) для уведомления твоего приложения об обновлениях областей, позволяя повторное согласие или выдачу новых токенов доступа. Logto также предоставит больше вебхуков для помощи с этим в будущих обновлениях.

В итоге

Функции многоарендности и совместной работы в Logto Cloud активно используют нашу функцию Организаций. Если ты разрабатываешь аналогичное многопользовательское приложение, подумай о применении этой функции с аналогичными подходами.

Надеюсь, этот пост был полезен. Если у тебя есть вопросы или тебе хочется обсудить, присоединяйся к нашему каналу в Discord.