# 07 · Гостевой доступ [← Home](Home.md) Гость (курьер, такси, родственник) открывает шлагбаум сам — по ссылке с QR-кодом, короткому коду или PIN — без звонка жителю и без регистрации. По умолчанию пропуск живёт **12 часов**; всё логируется. ## Как это выглядит ``` Житель (кабинет) или админ Гость (телефон, без аккаунта) ───────────────────────── ───────────────────────────── Создать пропуск: Получает ссылку (мессенджер/SMS): срок 12 ч, имя «Курьер» https://gate.example.com/guest/ │ │ ▼ ▼ Ссылка + QR + код 7K4M-Q2XD Страница: адрес ЖК, срок, кнопка + PIN 554145 «Открыть шлагбаум» (большая) │ ▼ Шлагбаум открыт, событие в журнале: «Иванов И.И. (гость Курьер)», guest ``` ## Три способа открыть (для гостя) 1. **Ссылка/QR** — `/guest/`: подписанная HMAC-ссылка (токен не подбирается), страница с большой кнопкой; QR ведёт на неё же. Работает без сессии и CSRF — защиту обеспечивает подпись + rate-limit. 2. **Короткий код** — `7K4M-Q2XD` на странице `/guest` («открыть по коду»): продиктовать по телефону, ввести на планшете охраны. Алфавит кода не содержит неоднозначных символов (0/O, 1/I/L). 3. **PIN** — 6 цифр для клавиатуры панели BAS-IP (`pin_fallback`). ## Создание * **Житель**: кабинет → «Гостевой доступ» (если карточке разрешено `allow_guest_pass`). Поля: срок (пресеты `1, 2, 4, 8, 12, 24, 48, 72` ч), имя гостя, телефон, госномер, цель. Обязательность полей — в настройках. * **Админ/оператор**: `/admin/guest` → «Создать» от имени любого жителя. * **API**: `POST /api/v1/guest/passes` (scope `guest.create`) — для интеграций (домофон, бот, CRM курьеров). * **CLI**: `bin/bas-ip guest:create --resident=5 --hours=12 --name="Курьер"`. ## Ограничения и безопасность | Механизм | Значение по умолчанию | |---|---| | Срок по умолчанию / максимум | 12 ч / 72 ч | | Открытий в пределах срока | без лимита (`max_uses=0`) или N | | Активных пропусков на жителя / на дом | 5 / 200 | | Созданий в сутки на жителя | 10 | | Rate-limit страницы и открытия | `guest_open: 20/мин` на IP + cooldown 3 с | | Подпись ссылки | HMAC ключом приложения (`signed_link`) | | Автоистечение | cron `schedule:run` гасит истёкшие | Гостевое открытие не требует авторизации, поэтому защищено комплексно: подпись + одноразовость токена по сроку + rate-limit + журнал. Попытки открытия с истёкшим/отозванным кодом дают понятную страницу и пишутся в журнал как `denied`. ## Журналирование Каждое событие: **кто** (житель-владелец пропуска + имя гостя), **когда**, **тип доступа `guest`**, квартира, устройство, результат, источник (web/код/ API), счётчик использований пропуска. Видно в: * `/admin/gate` (журнал ворот, фильтр «гостевые»), * карточке пропуска (`/admin/guest`) — сколько раз и когда открыли, * кабинете жителя (`/cabinet/log`), * `bin/bas-ip gate:log --access=guest`, * лог-канале `gate` (`storage/logs/gate-*.log`). Уведомления (настраивается): жителю при создании (`guest_created`), при использовании (`guest_used`), гостю — приглашение (`guest_invite`). ## Управление пропусками * **Отозвать** — в кабинете жителя, в `/admin/guest`, `guest:revoke <код>`; причина пишется в журнал. * **Истёкшие** — гасятся автоматически (`auto_revoke_expired`). * **Экспорт** — `/admin/guest/export`. ## Настройка `config.guest` и **Админка → Настройки → Гостевой доступ**: сроки, пресеты, лимиты, обязательные поля, PIN, синхронизация госномера с whitelist панели (`car_sync`, driver-specific), уведомления. --- Дальше: [08 · Биллинг](08-Billing.md)