Files
Aknaproff/HOTFIX_v4.1.18.md
Deploy Bot 64403d6fd6 v4.1.21: Реструктуризация проекта для Synology ARM
- Реструктуризация: 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
2026-01-14 18:37:00 +02:00

6.0 KiB
Raw Blame History

🔧 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() разрешает ТОЛЬКО admin
  • toggleDate() и 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 Работает Работает

📦 ИЗМЕНЁННЫЕ ФАЙЛЫ

  1. public/static/app.js (строки 28-36, 1113, 1648)

    • Добавлена функция canToggleDates()
    • Обновлена проверка в toggleDate()
    • Обновлена проверка в toggleWorksheetsStep()
  2. 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