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

8.9 KiB
Raw Blame History

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_namefield
    • action_typeaction

Результат:

  • 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_namefield
    • action_typeaction

База данных

  • production_records:
    • Добавлена колонка problems TEXT DEFAULT NULL
    • Добавлена колонка problems_date DATE DEFAULT NULL

Тестирование

Backend API Tests

User (kasutaja) может редактировать Notes

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

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: Обновить БД (ОБЯЗАТЕЛЬНО)

# 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: Обновить код

Быстрый вариант (рекомендуется):

scp dist/_worker.js user@server:/path/to/webapp/dist/
docker-compose restart

Полный вариант:

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: Проверка

# Тест пользователя 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
Редактировать даты
Добавить новую запись
Удалить запись
Редактировать все поля
Изменить настройки

Статус


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!