Настройка приложения после установки: локальные конфиг-файлы, режимы авторизации и аутентификации, а также справочник дополнительных параметров (params).
Настройка производится посредством файлов в папке config/:
если не указано иное, то настройки вписываются именно сюда. Переопределяет значения по умолчанию из params.php (сам params.php не редактируем - он обновляется вместе с приложением)Приложение поддерживает следующие режимы авторизации пользователей:
php
'authorizedView'=>false, //аутентификация достаточна для авторизации
php
'useRBAC'=>false, //включить RBAC и выдавать права только тем кому они явно назначены
Комбинации аутентификации и RBAC:
| authorizedView | useRBAC | результат |
|---|---|---|
| false | false | аутентификации, авторизации и ограничений в правах нет - всем можно все |
| true | false | аутентификация требуется, полные права у всех аутентифицированных |
| false | true | аутентификация не требуется, просмотр доступен всем (в том числе без входа), права на изменение нужно выдавать явно — действуют они после аутентификации |
| true | true | аутентификация требуется, и никаких прав по умолчанию нет, все права нужно выдавать явно |
Чтобы пользователь мог вводить пароль, надо их где-то хранить, вариантов всего два
Хэши паролей (bcrypt) будут храниться прямо в БД. Для включения такого режима нужно выставить параметр
'localAuth'=>true, //включить локальную БД паролей
Для этого локальное хранение паролей должно быть отключено:
'localAuth'=>false, //включить локальную БД паролей
Настройки LDAP указываются следующим образом: нужно создать файл config/ldap.php следующего содержания:
<?php
return [
'class' => \app\components\ldap\LdapService::class,
'connection' => [
'port' => 636, // 636 = LDAPS (use_ssl); для 389 см. ниже
'hosts' => ['dc1.domain.local', 'dc2.domain.local'],
'account_suffix' => '@domain.local',
'base_dn' => 'DC=domain,DC=local',
// под кем подключаться к AD (подойдёт любой пользователь, права админа не нужны)
'username' => 'inventory@domain.local',
'password' => 'SuperSecretPassword1!',
'use_ssl' => true, // LDAPS на 636
'use_tls' => false, // STARTTLS на 389 (взаимоисключающе с use_ssl)
'timeout' => 5,
'options' => [
LDAP_OPT_X_TLS_REQUIRE_CERT => LDAP_OPT_X_TLS_NEVER,
],
],
];
Доступ к AD реализован компонентом app\components\ldap\LdapService
(поверх directorytree/ldaprecord). Проверить настройку против живого
контроллера домена:
php yii ldap/ping # доступность DC и bind сервисной учётки
php yii ldap/account <login> # справка об учётке (OU, срок пароля, статус)
php yii ldap/auth <login> <password> # проверка логина/пароля
Недоступность DC не роняет вход 500-й ошибкой: на странице входа будет сообщение «Служба аутентификации временно недоступна».
php
'authorizedView'=>false,
'useRBAC'=>false,php
'useRBAC'=>true,bash
php yii rbac/init
либо при работе в докер контейнере
bash
docker exec -it "arms-arms-app-1" php yii rbac/initbash
php yii rbac/grant admin pupkin
либо при работе в докер контейнере
bash
docker exec -it "arms-arms-app-1" php yii rbac/grant admin pupkinДополнительные параметры определяются в файле config/params-local.php в формате
<?php
return [
'param'=>'value',
];
Значения по умолчанию (и полный перечень параметров) можно посмотреть в файле config/params.php.
techs.invNumStrPads: количество знаков числовой части инвентарного номера в зависимости от количества префиксов. Default: [9,6,4] - без префикса 9, с одним префиксом 6, с двумя 4; последнее значение действует и для большего числа префиксов.
Пример:
000000001 //0 префиксов - 9 цифр
МСК-000001 //1 префикс - 6 цифр
МСК-ПРН-0001 //2 префикса - 4 цифры
МСК-IT-ПРН-0001 //3 префикса также 4 цифры
['place','org','type'] - сначала префикс помещения, потом организации-владельца оборудования, потом тип оборудованияsoft.deferred_rescan: отложенный рескан софта. Распознавание ПО в отпечатке (regexp-скан) — процедура медленная: и при изменении продукта в справочнике ПО (надо пересканировать все подходящие ОС), и при обновлении ОС с большим списком пакетов (push с linux-машин).
comps_rescan_queue — как при изменении продукта в справочнике ПО, так и при обновлении отпечатка/паспорта самой ОС (push, правки). Обязательно через cron регулярно вызывать команду yii comps/rescan, которая обрабатывает очередь по 100 ОС за раз, иначе состав обнаруженного ПО перестанет обновляться.В обоих режимах сохранение ОС без изменения отпечатка софта и паспортного ПО скан не запускает (например, ручная правка полей ОС или повторный push с тем же списком пакетов).
Пример cron:
*/5 * * * * php yii comps/rescan # обработка очереди рескана (нужно при deferred_rescan=true)
Механизм e-mail-оповещений (очередь — Уведомления): события (смена статуса документа) и сторожевые правила ставят письма в очередь, отправку делает по cron команда yii notify/send. По умолчанию выключен — включается только осознанно, вместе с настройкой почты и cron.
['scheme'=>'smtp','host'=>'mail.example.com','port'=>25]https://arms.example.com) для абсолютных ссылок в письмах. Без него письма, поставленные из консоли (notify/watch), уходят без ссылок на объекты.notifyRules: декларативные правила оповещений о «залежавшихся» объектах для yii notify/watch — формат, возможности условий, дедупликация и повторы описаны на отдельной странице Сторожевые правила оповещений. Короткий пример:
'notifyRules'=>[
'contract-stale-new'=>[
'class'=>\app\models\Contracts::class,
'condition'=>['state_id'=>1], //массив для andWhere() либо callable(ActiveQuery)
'age'=>'1 day', //не менялся дольше (по updated_at)
'subject'=>'Документ «{name}» завис в статусе «Новый»',
'repeat'=>'3 days', //повторное письмо не чаще; не указано = однократно
],
],
Команды для cron:
*/5 * * * * php yii notify/send # отправка очереди
0 * * * * php yii notify/watch # прогон правил notifyRules
0 3 * * * php yii notify/cleanup # чистка отправленного старше 90 дней
Журнал медленных запросов, ежесуточный отчёт по access-логу и алертинг в Zabbix — механизм и включение описаны на отдельной странице Мониторинг производительности.
yii perf/report (список через запятую, glob; .gz читается прозрачно). Default: **/var/log/apache2/inventory.http_access.log***