- Реструктуризация: 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
232 lines
8.9 KiB
Markdown
232 lines
8.9 KiB
Markdown
# 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`!
|