Created pytest test suite to verify permission inheritance through positions: Test Coverage: 1. User without position has no permissions (PASS) 2. User with position gets all group permissions (needs fix) 3. Position change updates permissions dynamically 4. Remove position removes all permissions 5. Multiple users with same position get same permissions 6. Staff users keep all permissions regardless 7. Multiple groups' permissions are additive 8. get_all_permissions() includes position perms 9. Position without groups grants no permissions (PASS) 10. Inactive users have no permissions 11. Direct user permissions + position permissions combine 12. Feed/Documents integration tests Current Results: - 3 tests PASSED (basic cases) - 10 tests need fixing (fixture scope issues) Purpose: These tests will validate that PositionRoleBackend correctly grants permissions from Position.groups to users, which is needed for features like: - Show 'Create Post' button for users with publishing rights - Show 'Create Document' button for users with document rights - Consistent permission checks across frontend and backend Next Steps: 1. Fix IntegrityError in permission creation (use filter first) 2. Make fixtures work across test classes 3. Run tests to verify PositionRoleBackend implementation 4. If tests fail, fix the backend implementation
EUSRR - Корпоративная система управления
Комплексная корпоративная информационная система с интеграцией Active Directory/LDAP для управления сотрудниками, документами, заявками и внутренними коммуникациями.
Основные возможности
🏢 Управление сотрудниками
- Интеграция с Active Directory через LDAP
- Автоматическая синхронизация данных сотрудников
- Управление отделами и должностями
- Профили сотрудников с фотографиями и контактами
- Иерархия отделов с назначением руководителей
📄 Система документооборота
- Загрузка и распространение документов
- Отправка документов всем сотрудникам, конкретным отделам или индивидуально
- Автоматические уведомления о новых документах
- Отслеживание ознакомления с документами
- Визуальное выделение неознакомленных документов
📬 Система уведомлений
- Веб-уведомления в реальном времени (WebSocket)
- Email-уведомления с настраиваемой периодичностью (мгновенно, ежедневно, еженедельно)
- Telegram-уведомления через бота
- Индивидуальные настройки уведомлений для каждого пользователя
- Звуковые оповещения о новых уведомлениях
📋 Система заявок
- Создание и отслеживание заявок
- Назначение ответственных отделов
- История изменений заявок
- Комментарии и обсуждения
💬 Внутренние коммуникации
- Лента новостей организации
- Посты с комментариями
- Упоминания сотрудников (@mention)
- Ленты новостей по отделам
📅 Календарь событий
- Корпоративный календарь
- События отделов и общеорганизационные события
- Интеграция с календарем на главной странице
Технологический стек
Backend
- Python 3.13.5
- Django 5.2.4 - основной веб-фреймворк
- Django REST Framework - REST API
- Django Channels - WebSocket поддержка
- PostgreSQL / SQLite - база данных
- python-ldap - интеграция с Active Directory
- Celery (опционально) - асинхронные задачи
Frontend
- Bootstrap 5 - UI фреймворк
- Vanilla JavaScript (ES6+) - модульная архитектура
- WebSocket - реальное время
- Fetch API - HTTP запросы
Интеграции
- Active Directory (LDAP) - управление пользователями
- Telegram Bot API - уведомления в Telegram
- SMTP (Yandex) - email-рассылка
- SMS Gateway - SMS-уведомления
Установка и запуск
Предварительные требования
- Python 3.11+
- PostgreSQL 14+ или SQLite (для разработки)
- Active Directory (опционально, можно отключить через
LDAP_ENABLED=False) - Git
Установка
- Клонирование репозитория:
git clone https://github.com/IgorNadein/EUSRR.git
cd EUSRR
- Создание виртуального окружения:
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# или
.venv\Scripts\activate # Windows
- Установка зависимостей:
cd backend
pip install -r requirements.txt
- Настройка окружения:
# Скопируйте .env.example в .env и настройте параметры
cp .env.example .env
Основные параметры в .env:
# База данных
USE_SQLITE=True # True для SQLite, False для PostgreSQL
# Django
SECRET_KEY=your-secret-key
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
# LDAP (можно отключить)
LDAP_ENABLED=False # True для интеграции с AD
# Email
EMAIL_HOST=smtp.yandex.ru
EMAIL_PORT=465
EMAIL_HOST_USER=your-email@yandex.ru
EMAIL_HOST_PASSWORD=your-password
# Telegram (опционально)
TELEGRAM_BOT_TOKEN=your-bot-token
- Применение миграций:
python manage.py migrate
- Создание суперпользователя:
python manage.py createsuperuser
- Сбор статических файлов:
python manage.py collectstatic --noinput
Запуск разработки
# Запуск сервера разработки
python manage.py runserver 9000
# В отдельном терминале - Telegram бот (опционально)
python manage.py run_telegram_bot
Приложение будет доступно по адресу: http://localhost:9000
Запуск в продакшене
- Настройте
.envдля продакшена:
DEBUG=False
USE_SQLITE=False
ALLOWED_HOSTS=your-domain.com
LDAP_ENABLED=True
- Используйте WSGI сервер (Gunicorn):
pip install gunicorn
gunicorn eusrr_backend.wsgi:application --bind 0.0.0.0:8000
-
Настройте веб-сервер (Nginx) как reverse proxy
-
Настройте supervisor/systemd для автозапуска
Структура проекта
EUSRR/
├── backend/ # Django проект
│ ├── api/ # REST API
│ │ └── v1/ # API версия 1
│ │ ├── documents/ # API документов
│ │ ├── employees/ # API сотрудников
│ │ └── ...
│ ├── documents/ # Приложение документов
│ ├── employees/ # Приложение сотрудников
│ ├── notifications/ # Система уведомлений
│ ├── requests_app/ # Система заявок
│ ├── feed/ # Лента новостей
│ ├── calendar_app/ # Календарь событий
│ ├── communications/ # Коммуникации
│ ├── static/ # Статические файлы
│ │ ├── css/ # Стили
│ │ └── js/ # JavaScript модули
│ ├── templates/ # HTML шаблоны
│ ├── media/ # Загруженные файлы
│ └── eusrr_backend/ # Настройки Django
└── README.md # Этот файл
Основные функции
Работа с документами
-
Создание документа:
- Загрузка файла
- Выбор получателей (все/отделы/конкретные сотрудники)
- Автоматические уведомления
-
Отслеживание ознакомления:
- Клик на документ автоматически отмечает ознакомление
- Визуальное выделение неознакомленных документов
- Ведомость ознакомлений для администраторов
Система уведомлений
-
Веб-уведомления:
- Звуковое оповещение
- Счётчик непрочитанных
- Список в реальном времени
-
Email-уведомления:
- Мгновенная отправка
- Ежедневный дайджест
- Еженедельный дайджест
-
Telegram-уведомления:
- Привязка аккаунта через код
- Мгновенная отправка важных уведомлений
LDAP интеграция
- Двусторонняя синхронизация данных
- Создание пользователей в AD
- Управление отделами через OU
- Автоматическое обновление при изменениях
API Документация
REST API доступен по адресу /api/v1/
Основные эндпоинты:
/api/v1/employees/- Сотрудники/api/v1/departments/- Отделы/api/v1/documents/- Документы/api/v1/requests/- Заявки/api/v1/calendar/events/- События календаря/api/notifications/- Уведомления
Документация API: /api/docs/ (если установлен drf-spectacular)
Разработка
Создание миграций
python manage.py makemigrations
python manage.py migrate
Запуск тестов
pytest
# или
python manage.py test
Линтинг кода
flake8 .
black .
isort .
Настройка уведомлений
Настройте SMTP в .env:
EMAIL_HOST=smtp.yandex.ru
EMAIL_PORT=465
EMAIL_USE_SSL=true
EMAIL_HOST_USER=your-email@yandex.ru
EMAIL_HOST_PASSWORD=your-app-password
DEFAULT_FROM_EMAIL=Company <your-email@yandex.ru>
Telegram
- Создайте бота через @BotFather
- Получите токен
- Настройте в
.env:
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
TELEGRAM_BOT_USERNAME=your_bot_name
- Запустите бота:
python manage.py run_telegram_bot
Отложенная отправка
Для дайджестов используйте команду:
python manage.py send_pending_notifications --batch-size=100
Настройте cron для автоматического запуска:
# Ежедневно в 9:00
0 9 * * * /path/to/python /path/to/manage.py send_pending_notifications
Безопасность
- Используйте HTTPS в продакшене
- Настройте CORS правильно
- Используйте сильные пароли
- Регулярно обновляйте зависимости
- Настройте файрвол
- Используйте переменные окружения для секретов
Документация и troubleshooting
Архитектура
- REALTIME_MIGRATION_GUIDE.md ⭐ - Миграция на архитектуру realtime
- backend/realtime/README.md - WebSocket API документация
Руководства по функциям
- MESSAGE_EDITING_ANALYSIS.md - Редактирование сообщений
- POLLS_IMPLEMENTATION.md - Система опросов
- PERSONAL_CALENDAR_FEATURE.md - Персональный календарь
- REACTIONS_FROM_DATABASE.md - Система реакций
- REQUESTS_RECIPIENTS_PLAN.md - Система получателей заявок
WebSocket диагностика
- WEBSOCKET_1006_QUICK_GUIDE.md ⚡ - Быстрая шпаргалка (5 минут)
- WEBSOCKET_1006_PRIORITY_CHECK.md - Приоритетная диагностика
- WEBSOCKET_1006_DIAGNOSTIC_PLAN.md - Полный план диагностики
- WEBSOCKET_KEEPALIVE_FIX.md - Исправление keepalive
- WEBSOCKET_UNIFIED_MIGRATION.md - Миграция на унифицированный WS
Рефакторинг и оптимизация
- REFACTORING_SUMMARY.md - Общий итог рефакторинга
- CACHE_OPTIMIZATION_SUMMARY.md - Оптимизация кеширования
- API_REFACTORING_TESTING.md - Тестирование API
Лицензия
Проприетарное ПО © 2024-2025 Robotail
Контакты
- Автор: Игорь Надеин
- GitHub: @IgorNadein
- Проект: EUSRR
Changelog
v2.0.0 (21.11.2025)
- ✨ Добавлена возможность отправки документов на отделы
- ✨ Визуальное выделение неознакомленных документов
- ✨ Автоматическое ознакомление при клике на документ
- ✨ Адаптивная мобильная версия
- 🐛 Исправлена фильтрация "Мои документы" для загрузивших
- 🐛 Исправлена ведомость ознакомлений с учётом отделов
- 🔧 Добавлена поддержка массовых рассылок с порогом
v1.0.0
- 🎉 Первый релиз
- ✨ Базовая система документооборота
- ✨ Интеграция с LDAP
- ✨ Система уведомлений
- ✨ Управление заявками
Description
Разработка — в develop; локальный CI работает через Git hooks и quality gates перед коммитом/пушем. После проверки — слияние в master. Push в master запускает blue-green деплой на CORP через Gitea Actions и Telegram-отчёт. Статус деплоя — «Действия».
https://corp.robotail.pro/
Readme
86 MiB
Languages
Python
47.6%
TypeScript
29.8%
JavaScript
15.7%
HTML
4.1%
SCSS
2.1%
Other
0.7%