
B2B-портал для клиентов: как открыть свои данные и не показать чужие
Начните не с списка модулей, а с границы компании-клиента: кто подтверждает организацию, приглашает сотрудников и решает, какие заказы и документы им доступны. Каждый запрос к данным должен проверять эту границу на сервере, а права нужно отзывать при смене сотрудника.
Опишите компанию-клиента как отдельную область данных
У одного контрагента может быть несколько сотрудников и филиалов. Порталу нужно знать, какая организация подтверждена, какие договоры к ней относятся и кто вправе приглашать новых пользователей. Простая регистрация по рабочему email не доказывает связь человека с юридическим лицом. До выдачи доступа определите процедуру проверки и ответственного на стороне поставщика.
Не используйте номер заказа или идентификатор компании в URL как разрешение на просмотр. OWASP рекомендует проверять авторизацию на каждом запросе и отдельно контролировать принадлежность данных арендатору в многоклиентской системе. Это относится и к API, и к скачиванию файлов, и к поисковой выдаче внутри портала.
Составьте матрицу ролей по действиям
Закупщик может создать заявку, согласующий — утвердить её, бухгалтер — скачать счёт, администратор клиента — пригласить сотрудника. Реальные полномочия могут быть другими; начните с рабочих договоров, а не с названий должностей. Для каждого действия укажите, на какие записи оно распространяется и кто меняет роль.
Пример Salesforce с внешними пользователями показывает принцип ограниченного доступа к записям, но его настройки не являются универсальным правилом для любого стека. Важен результат: новый пользователь не получает весь архив компании по умолчанию, а сотрудник другой компании не видит его никогда.
| Действие | Возможный владелец права | Проверка |
|---|---|---|
| Создать заявку | Закупщик своего контрагента | Заявка привязана к своей компании |
| Согласовать заказ | Назначенный согласующий | Нельзя утвердить чужой или неразрешённый заказ |
| Скачать счёт | Бухгалтер с доступом к договору | Ссылка на файл не открывается другой компанией |
| Пригласить сотрудника | Администратор клиента | Приглашение не меняет чужую организацию |
| Отозвать доступ | Администратор клиента или поставщик | Старая сессия и ссылки больше не дают права |
Откройте сначала один полный процесс
Портал не обязан с первого дня повторять ERP и CRM. Выберите один полезный сценарий: клиент отправляет заказ, видит его состояние и получает относящийся к нему документ. Для каждого этапа определите источник правды и скорость обновления. Если статус меняет менеджер вручную, не подписывайте его как «обновляется в реальном времени».
Доступ к документам требует отдельной проверки: файл может лежать в хранилище вне базы заказов. В Salesforce, например, видимость файлов для клиентов настраивается особо. Для любого стека проверьте и страницу документа, и прямую ссылку на скачивание.
Продумайте вступление и уход сотрудника
Назначьте, кто подтверждает нового клиента, приглашает работников и меняет их роли. Когда человек увольняется или договор прекращается, доступ нужно отозвать во всех действующих сессиях и ссылках; удаление кнопки из меню недостаточно. Журнал важных действий помогает разобрать, кто скачал документ и кто утвердил заказ.
Для поддержки предусмотрите путь восстановления доступа с повторной проверкой личности и компании. Не позволяйте оператору вручную переставить пользователя к другому контрагенту по одному письму без проверенного основания.
Примите портал тестом двух контрагентов
Создайте компанию А и компанию Б с различными заказами и файлами. Войдите сотрудником А, измените в адресе ID на заказ Б, повторите через API и прямую ссылку на файл. Ожидаемый результат — отказ без раскрытия содержимого. Затем снимите роль у сотрудника А и проверьте, что старая сессия больше не открывает его документы.
Следующий шаг — согласовать матрицу прав и один клиентский сценарий на реальных, обезличенных примерах. Лишь после этого выбирайте интеграции и интерфейс кабинета: так легче оценить работу, чем по абстрактному списку «каталог, документы, чат».
Вопросы и ответы
Достаточно ли скрыть чужие заказы в интерфейсе?
Нет. Сервер должен проверять принадлежность заказа и право пользователя при каждом чтении и изменении, включая API и ссылки на файлы.
Нужны ли разные роли сотрудникам одной компании?
Если они выполняют разные действия, да: закупка, согласование и бухгалтерские документы не всегда принадлежат одному человеку. Состав ролей определяйте по реальному процессу.
.webp&w=1920&q=85)