РазделВеб-разработка
Чтение8 мин
Дата21 октября 2026
ФорматПрактическая статья
Сначала опишите роли и права
Не начинайте с формы регистрации. Составьте матрицу: кто может видеть профиль, заказы, документы, чужие данные, статусы и административные действия.
Минимальные сущности кабинета
| Сущность | |
|---|---|
| ранит | |
| users | идентификатор и auth-данные |
| profiles | имя, контакты, реквизиты |
| roles/permissions | доступ |
| sessions | активные сессии/устройства |
| orders/operations | история действий |
| password_resets | одноразовые токены |
| audit_log | важные изменения |
| external_links | связи с CRM/ERP |
Пароли не хранят в открытом виде
Используйте password hashing API платформы/фреймворка, ограничивайте попытки входа, делайте одноразовые токены восстановления с истечением срока и инвалидируйте их после использования.
PHP: базовое хеширование пароля
PHP
$hash = password_hash($password, PASSWORD_DEFAULT);
if (password_verify($passwordFromForm, $hashFromDb)) {
// Успешная проверка.
}
// Никогда не храните исходный пароль
// и не отправляйте его в лог.История операций должна иметь источник истины
Если заказы живут в CRM/ERP, решите: кабинет читает их онлайн через API или получает синхронизированную копию. Нельзя показывать пользователю данные из двух несогласованных источников.
Сессии и безопасность
- HTTPS обязателен;
- Secure/HttpOnly cookies;
- CSRF-защита для изменяющих запросов;
- проверка прав на сервере, а не только скрытие кнопок;
- аудит смены email/телефона/реквизитов;
- 2FA для чувствительных кабинетов, если риск оправдан.
Что проверить перед запуском
| Сценарий | Проверка |
|---|---|
| Регистрация | duplicate email/phone |
| Login | rate limit и session |
| Восстановление | токен одноразовый и истекает |
| Роли | |
| одит ACL | |
| Чужой объект | IDOR запрещён сервером |
| Logout | session инвалидирована |
| Изменение профиля | audit log |
| CRM/ERP недоступна | понятный fallback/status |