Что мобильное приложение, что CRM (Customer Relationship Management) предполагает разделение доступов к данным. Если в мобильном приложении может быть скрытый режим доступа к альфа-функциям, то в CRM продавцу нет рабочей необходимости знать маржинальность всех сделок компании. Поэтому и при создании API нужно уметь проверять доступ к функциям и данным.
В этом материале рассмотрим уровни доступа:
- Доступ по признаку аутентификации — аноним/пользователь
- Доступ по признаку глобальных прав — админу доступно больше, чем оператору
- Доступ по признаку модельных прав — можно ли выполнить действие X с товарами?
- Доступ по признаку объектных прав — можно ли модифицировать свои статьи?
- Доступ по признаку бизнес-правил — создавать релиз можно только в будний день, кроме праздничных недель
Несанкционированный доступ и утечка данных может обходиться дорого, поэтому стоит уделить этому время.
В материале буду упоминать django-guardian и django-brackets, которые упрощают организацию доступов в Django приложении.
1. Доступ по признаку аутентификации
Есть понятия авторизация и аутентификация, различия которых можно запомнить так:
- Аутентификация — это "Кто ты такой?", то есть "Кто ты по жизни? Чем докажешь?"
- Авторизация — это "Что ты можешь?", то есть "С какого района будешь? Вали отсюда"
Вместе с идентификацией получается такой процесс:
- Идентификация: "Как тебя зовут?" → "Вася"
- Аутентификация: "А ты точно Вася? Докажи!" → показывает документы/татухи
- Авторизация: "Окей, ты Вася. Теперь слушай, что тебе можно, а что нельзя"
Всё это к тому, что в условном маркетплейсе:
- Аноним (неизвестный пользователь) может просматривать каталог товаров
- Аноним или пользователь может добавлять товары в корзину
- Однако только авторизованный пользователь может оформить заказ
Авторизация — блокирующая процедура, на ней много пользователей уходят из продукта.