Enforce pricelist write checks and auto-restart on DB settings change

This commit is contained in:
Mikhail Chusavitin
2026-02-05 15:44:54 +03:00
parent d318a7f462
commit 4732605925
5 changed files with 70 additions and 21 deletions

View File

@@ -87,27 +87,34 @@ go run ./cmd/qfs -migrate
### Минимальные права БД для пользователя квотаций
Если нужен пользователь, который может создавать/редактировать квотации, но не может управлять ценами:
Если нужен пользователь, который может работать с конфигурациями, но не может создавать/удалять прайслисты:
```sql
DROP USER IF EXISTS 'quote_user'@'%';
CREATE USER 'quote_user'@'%' IDENTIFIED BY 'StrongPassword!';
-- 1) Создать (или оставить существующего) пользователя
CREATE USER IF NOT EXISTS 'quote_user'@'%' IDENTIFIED BY 'StrongPassword!';
-- чтение данных для расчета/просмотра
-- 2) Сбросить лишние права (без пересоздания пользователя)
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'quote_user'@'%';
-- 3) Чтение данных для конфигуратора и синка
GRANT SELECT ON RFQ_LOG.lot TO 'quote_user'@'%';
GRANT SELECT ON RFQ_LOG.qt_lot_metadata TO 'quote_user'@'%';
GRANT SELECT ON RFQ_LOG.qt_categories TO 'quote_user'@'%';
GRANT SELECT ON RFQ_LOG.qt_pricelists TO 'quote_user'@'%';
GRANT SELECT ON RFQ_LOG.qt_pricelist_items TO 'quote_user'@'%';
GRANT SELECT ON RFQ_LOG.qt_users TO 'quote_user'@'%';
-- работа с квотациями
GRANT SELECT, INSERT, UPDATE, DELETE ON RFQ_LOG.qt_configurations TO 'quote_user'@'%';
-- 4) Работа с конфигурациями
GRANT SELECT, INSERT, UPDATE ON RFQ_LOG.qt_configurations TO 'quote_user'@'%';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'quote_user'@'%';
```
Важно: этот вариант не ограничивает редактирование только своими записями в `qt_configurations`.
Если пересоздавать пользователя нельзя, используйте `SHOW GRANTS FOR 'quote_user'@'%';` и сделайте точечные `REVOKE`.
Важно:
- не выдавайте `INSERT/UPDATE/DELETE` на `qt_pricelists` и `qt_pricelist_items`, если пользователь не должен управлять прайслистами;
- если используется host-специфичный аккаунт (`'quote_user'@'192.168.x.x'`), назначьте права и для него;
- после смены DB-настроек через `/setup` приложение перезапускается автоматически и подхватывает нового пользователя.
### 4. Импорт метаданных компонентов