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

204 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔧 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):**
```javascript
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):**
```javascript
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):**
```javascript
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):**
```javascript
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**
```bash
# 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)
- Пересобран с новой логикой
---
## 🚀 **ОБНОВЛЕНИЕ**
### **На сервере:**
```bash
# 1. Остановить
docker-compose down
# 2. Распаковать v4.1.18
unzip aknaproff_production_v4.1.18_FINAL.zip
# 3. Запустить
cd backend/
docker-compose up -d --build
```
### **Проверка:**
```bash
# Логин под 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