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
This commit is contained in:
231
CHANGES_v4.1.8.md
Normal file
231
CHANGES_v4.1.8.md
Normal file
@@ -0,0 +1,231 @@
|
||||
# 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`!
|
||||
Reference in New Issue
Block a user