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

Ранее мы писали об аутентификации пользователя. Теперь давайте рассмотрим связанную тему, авторизацию.

Что такое Авторизация?

Авторизация — это процесс определения того, имеет ли кто-либо доступ к чему-либо. Это отличается от аутентификации, которая заключается в определении того, кем является человек.

В качестве примера представьте, что мы создаем упрощенный Twitter. Пользователи могут регистрироваться, публиковать твиты и удалять твиты. Когда мы получаем запрос на удаление твита, нам нужно сделать две вещи:

  1. Определить, кто сделал запрос
  2. Определите, разрешено ли им удалять твит.

Шаг 1 — аутентификация — мы определяем, кто пользователь. Шаг 2 — авторизация — мы определяем, разрешено ли этому пользователю удалить твит.

В этом случае шаг 2 может быть таким же простым, поскольку только пользователь, который сделал твит, может удалить его:

Шаг 2 также может включать другие правила, например, мы нанимаем команду модераторов и позволяем им также удалять твиты:

Реализация авторизации

Существует множество различных подходов к реализации авторизации. Одним из примеров, с которым вы, возможно, уже сталкивались, является управление доступом на основе ролей (RBAC). Управление доступом на основе ролей — это причудливый способ сказать «назначьте каждому пользователю роль (или группу), и каждая роль имеет определенный набор действий, которые они могут выполнять».

На самом деле мы уже рассмотрели пример RBAC выше. В нашем упрощенном примере с Twitter у нас было две роли:

1. Модераторы
2. Пользователи (мы неявно определили это как всех, кто не является модератором)

Пользователи могут создавать твиты и удалять свои твиты. Модераторы могут удалять любые твиты.

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

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

## Авторизация для бизнеса B2B

Давайте рассмотрим другой пример — построение бизнеса B2B/SaaS. В этом случае, скажем, мы делаем MVP Slack.

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

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

1. Владелец — может удалять организацию, управлять выставлением счетов и приглашать новых владельцев
2. Администратор — может создавать новые каналы, управлять настройками организации и приглашать новых администраторов/участников
3. Член — возможность отправлять сообщения на любом канале.

Важно отметить, что эти роли применяются только в контексте организации. Я могу быть владельцем организации A и участником организации B. Эти роли определяют мои разрешения внутри организации, а не глобально.

Поскольку эти роли являются иерархическими, у администраторов есть все разрешения, которые есть у участников, а у владельцев есть все разрешения, которые есть у администраторов.

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