Files
Aknaproff/CHANGES_v4.1.8.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

232 lines
8.9 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.
# AKNAPROFF v4.1.8 - Permissions Fix & UI Improvements
**Дата:** 2025-12-30
**Версия:** v4.1.8
**Тип:** Bug Fix + UI Improvement
---
## Изменения
### 1. ✅ Исправлены права доступа для Märkused (Notes)
**Проблема:** Пользователь `kasutaja` (role: user) не мог редактировать заметки
**Причина:** Код использовал `canEditRecords()` (только admin) вместо `canEditProblems()` (user и admin)
**Исправлено:**
- `openNotesModal()`: изменена проверка с `canEditRecords()` на `canEditProblems()`
- `saveNotes()`: изменена проверка с `canEditRecords()` на `canEditProblems()`
**Результат:**
- ✅ Admin может редактировать заметки
- ✅ User (kasutaja) может редактировать заметки
- ❌ Guest не может редактировать заметки (только просмотр)
---
### 2. ✅ Исправлены права доступа для Probleemid (Problems)
**Проблема:** Пользователь `kasutaja` (role: user) не мог редактировать проблемы
**Причина:**
1. Отсутствовали колонки `problems` и `problems_date` в таблице `production_records`
2. Неправильные названия колонок в `audit_log` (использовались `field_name` и `action_type` вместо `field` и `action`)
**Исправлено:**
- Добавлены колонки `problems` и `problems_date` в таблицу `production_records`
- Исправлены названия колонок в SQL запросах к `audit_log`:
- `field_name``field`
- `action_type``action`
**Результат:**
- ✅ Admin может редактировать проблемы и галочки ошибок
- ✅ User (kasutaja) может редактировать проблемы и галочки ошибок
- ❌ Guest не может редактировать проблемы (только просмотр)
---
### 3. ✅ Скрыта кнопка "Lisa uus rida" для не-админов
**Проблема:** Кнопка "Lisa uus rida" (Добавить новую строку) была видна всем пользователям
**Требование:** Только админы должны видеть кнопку добавления новой записи
**Исправлено:**
- Добавлен `id="addNewRowBtn"` к div с кнопкой в `original.html`
- Добавлена логика скрытия в `showMainApp()`:
- **Admin:** кнопка видна
- **User:** кнопка скрыта
- **Guest:** кнопка скрыта
**Результат:**
- ✅ Admin видит кнопку "Lisa uus rida"
- ❌ User (kasutaja) НЕ видит кнопку
- ❌ Guest НЕ видит кнопку
---
## Изменённые Файлы
### Frontend
- `public/static/app.js`:
- Исправлены права доступа для `openNotesModal()` и `saveNotes()`
- Добавлена логика скрытия кнопки "Lisa uus rida" в `showMainApp()`
- `public/original.html`:
- Добавлен `id="addNewRowBtn"` к div с кнопкой
- `src/original-html.ts`:
- Регенерирован с версией v4.1.8
### Backend
- `src/index.tsx`:
- Исправлены названия колонок в SQL запросах к `audit_log` (4 места)
- `field_name``field`
- `action_type``action`
### База данных
- `production_records`:
- Добавлена колонка `problems TEXT DEFAULT NULL`
- Добавлена колонка `problems_date DATE DEFAULT NULL`
---
## Тестирование
### Backend API Tests
#### ✅ User (kasutaja) может редактировать Notes
```bash
TOKEN=$(curl -s -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"kasutaja","password":"tootmine"}' | jq -r .token)
curl -X PATCH http://localhost:3000/api/records/2/notes \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"notes":"Test note from user"}'
# → {"success": true} ✅
```
#### ✅ User (kasutaja) может редактировать Problems
```bash
curl -X PATCH http://localhost:3000/api/records/2/problems \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"problems":"Test problem","errorFlags":{"worksheets_error":1}}'
# → {"success": true} ✅
```
### Frontend Tests
- ✅ Admin видит кнопку "Lisa uus rida"
- ✅ User (kasutaja) НЕ видит кнопку "Lisa uus rida"
- ✅ Guest НЕ видит кнопку "Lisa uus rida"
- ✅ User может открыть модальное окно заметок и сохранить
- ✅ User может открыть модальное окно проблем и сохранить
- ✅ Guest может открыть модальные окна (read-only)
---
## Deployment на Production
### ⚠️ КРИТИЧНО: База данных изменена
**Шаг 1: Обновить БД (ОБЯЗАТЕЛЬНО)**
```bash
# 1. Добавить колонки problems в production_records
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='
ALTER TABLE production_records ADD COLUMN problems TEXT DEFAULT NULL;
ALTER TABLE production_records ADD COLUMN problems_date DATE DEFAULT NULL;
'"
# 2. Проверка
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='
PRAGMA table_info(production_records);
'" | grep problems
# Должно показать: problems | TEXT | NULL
# problems_date | DATE | NULL
```
**Шаг 2: Обновить код**
Быстрый вариант (рекомендуется):
```bash
scp dist/_worker.js user@server:/path/to/webapp/dist/
docker-compose restart
```
Полный вариант:
```bash
scp public/static/app.js user@server:/path/to/webapp/public/static/
scp public/original.html user@server:/path/to/webapp/public/
scp src/original-html.ts user@server:/path/to/webapp/src/
scp src/index.tsx user@server:/path/to/webapp/src/
cd /path/to/webapp && npm run build && docker-compose restart
```
**Шаг 3: Проверка**
```bash
# Тест пользователя kasutaja
curl -X POST http://localhost:8180/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"kasutaja","password":"tootmine"}'
# Проверить кнопку "Lisa uus rida":
# - Admin: видна
# - User: скрыта
# - Guest: скрыта
```
---
## Матрица Прав Доступа
| Действие | Admin | User (kasutaja) | Guest |
|----------|-------|-----------------|-------|
| **Просмотр данных** | ✅ | ✅ | ✅ |
| **Редактировать Märkused** | ✅ | ✅ | ❌ |
| **Редактировать Probleemid** | ✅ | ✅ | ❌ |
| **Редактировать даты** | ✅ | ❌ | ❌ |
| **Добавить новую запись** | ✅ | ❌ | ❌ |
| **Удалить запись** | ✅ | ❌ | ❌ |
| **Редактировать все поля** | ✅ | ❌ | ❌ |
| **Изменить настройки** | ✅ | ❌ | ❌ |
---
## Статус
- **Версия:** v4.1.8
- **Статус:** ✅ Production Ready
- **Production URL:** https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai
- **HTTP:** 200 OK
- **JavaScript Errors:** 0
- **База данных:** ✅ Обновлена
---
## Changelog
### v4.1.8 (2025-12-30)
- 🔧 **FIX:** User (kasutaja) может редактировать заметки
- 🔧 **FIX:** User (kasutaja) может редактировать проблемы
- 🔧 **FIX:** Исправлены колонки audit_log (field_name → field, action_type → action)
- 📦 **ADD:** Колонки `problems` и `problems_date` в таблицу `production_records`
- 🎨 **UI:** Скрыта кнопка "Lisa uus rida" для user и guest
-**VERIFY:** Все права доступа работают корректно
---
## Известные Ограничения
1. **ERR_BLOCKED_BY_CLIENT** - AdBlock блокирует ресурс (не критично)
2. **Tailwind CSS CDN** - в production рекомендуется PostCSS
3. **SHA-256 пароли** - в production рекомендуется bcrypt
---
## Итог
**Проблемы решены:**
1. User (kasutaja) может редактировать заметки и проблемы
2. Кнопка "Lisa uus rida" видна только админам
3. Все права доступа работают корректно
🎯 **Готово к deployment на production**
Не забудьте выполнить SQL команды для добавления колонок `problems` и `problems_date`!