- Реструктуризация: src/ разбит на middleware/, utils/, repositories/ (удалены), routes/ (удалены) - Добавлен src/original-html.ts — полный HTML с reportModal - Добавлен src/index.tsx.backup — React-компонент с reportModal - Миграции переименованы (0001_initial_schema.sql) - Добавлена миграция 0018 (удалена позже) - Docker: multi-stage build, wrangler.toml - Frontend: public/static/app.js + style.css - seed.sql добавлен - Документация: CHANGELOG, CHANGES_v4.1.0-4.1.9, PROJECT_STRUCTURE
6.0 KiB
6.0 KiB
🔧 HOTFIX v4.1.18 - USER PERMISSIONS FIX
Дата: 2026-01-14
Тип: Critical Bugfix Release
Статус: ✅ Production Ready
🚨 КРИТИЧЕСКАЯ ПРОБЛЕМА ИСПРАВЛЕНА
Проблема: User (kasutaja) не мог toggle поля
Симптом:
Логин: kasutaja / tootmine
Клик по Töölehti → Ошибка: "Sul pole õigust töölehe staatust muuta. Palun logi sisse administraatorina."
Клик по LÕIKUS → Ошибка: "Sul pole õigust andmeid muuta. Palun logi sisse administraatorina."
По документации User ДОЛЖЕН иметь доступ:
- ✅ Подтверждение MAT-1/MAT-2
- ✅ Toggle полей (Töölehti, LÕIKUS, KLAAS, VALMIS, VÄLJAS)
🔍 ПРИЧИНА
Frontend проверка прав была неправильной:
Старый код (app.js:28):
function canEditRecords() {
// Only admin can edit records
return currentUser && currentUser.role === 'admin'; // ❌ Только admin!
}
// В toggleDate и toggleWorksheetsStep:
if (!canEditRecords()) { // ❌ Блокирует User!
alert('Sul pole õigust...');
return;
}
Проблема:
canEditRecords()разрешает ТОЛЬКОadmintoggleDate()иtoggleWorksheetsStep()используютcanEditRecords()- User (kasutaja) не может toggle!
✅ РЕШЕНИЕ
Создана новая функция canToggleDates():
Новый код (app.js:28-36):
function canEditRecords() {
// Only admin can edit records (add/edit/delete)
return currentUser && currentUser.role === 'admin';
}
function canToggleDates() {
// Admin and User can toggle dates
return currentUser && (currentUser.role === 'admin' || currentUser.role === 'user');
}
function isGuest() {
// Check if user is guest (read-only)
return !currentUser || currentUser.role === 'guest';
}
Обновлены функции toggle:
toggleDate (app.js:1111):
async function toggleDate(recordId, field, currentDate) {
// Check permissions - admin and user can toggle dates
if (!canToggleDates()) { // ✅ Использует canToggleDates()
alert('Sul pole õigust andmeid muuta. Palun logi sisse.');
return;
}
// ...
}
toggleWorksheetsStep (app.js:1647):
async function toggleWorksheetsStep(recordId) {
// Check permissions - admin and user can toggle
if (!canToggleDates()) { // ✅ Использует canToggleDates()
alert('Sul pole õigust töölehe staatust muuta. Palun logi sisse.');
return;
}
// ...
}
🧪 ТЕСТИРОВАНИЕ
✅ Test: User (kasutaja) permissions
# Login as User
TOKEN=$(curl -s -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"kasutaja","password":"tootmine"}' | jq -r '.token')
# Test 1: Toggle Töölehti
curl -s -X PATCH http://localhost:3000/api/records/2/worksheets-cycle \
-H "Authorization: Bearer $TOKEN" | jq
→ {"success": true, "date": "2026-01-14", "confirmed": 0} ✅
# Test 2: Toggle LÕIKUS
curl -s -X PATCH http://localhost:3000/api/records/3/status \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"field":"cutting","date":"2025-01-12"}' | jq
→ {"success": true} ✅
# Test 3: Toggle KLAAS
curl -s -X PATCH http://localhost:3000/api/records/3/status \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"field":"glazing","date":"2025-01-13"}' | jq
→ {"success": true} ✅
📊 СРАВНЕНИЕ
| Действие | v4.1.17 (User) | v4.1.18 (User) |
|---|---|---|
| Toggle Töölehti | ❌ Ошибка | ✅ Работает |
| Toggle LÕIKUS | ❌ Ошибка | ✅ Работает |
| Toggle KLAAS | ❌ Ошибка | ✅ Работает |
| Toggle VALMIS | ❌ Ошибка | ✅ Работает |
| Toggle VÄLJAS | ❌ Ошибка | ✅ Работает |
| Добавление записи | ❌ Нет доступа | ❌ Нет доступа (правильно) |
| Календарь MAT-1 | ❌ Нет доступа | ❌ Нет доступа (правильно) |
| Подтверждение MAT-1 | ✅ Работает | ✅ Работает |
📦 ИЗМЕНЁННЫЕ ФАЙЛЫ
-
public/static/app.js (строки 28-36, 1113, 1648)
- Добавлена функция
canToggleDates() - Обновлена проверка в
toggleDate() - Обновлена проверка в
toggleWorksheetsStep()
- Добавлена функция
-
dist/_worker.js (133.43 kB)
- Пересобран с новой логикой
🚀 ОБНОВЛЕНИЕ
На сервере:
# 1. Остановить
docker-compose down
# 2. Распаковать v4.1.18
unzip aknaproff_production_v4.1.18_FINAL.zip
# 3. Запустить
cd backend/
docker-compose up -d --build
Проверка:
# Логин под User
curl -X POST http://localhost:8180/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"kasutaja","password":"tootmine"}'
→ {"success":true,"token":"...","user":{"username":"kasutaja","role":"user"}}
# Открыть браузер → http://localhost:8180
# Логин: kasutaja / tootmine
# Кликнуть Töölehti → должно работать без ошибки
✅ СТАТУС
- ✅ User (kasutaja) может toggle все поля
- ✅ Admin (admin, aknaproff) работает как раньше
- ✅ Guest может только просматривать
- ✅ Права доступа корректны
- ✅ Production ready
Версия: AKNAPROFF v4.1.18 FINAL
Дата: 2026-01-14
Архив: aknaproff_production_v4.1.18_FINAL.tar.gz
Статус: ✅ Production Ready