- Реструктуризация: 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
204 lines
6.0 KiB
Markdown
204 lines
6.0 KiB
Markdown
# 🔧 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
|