В рамках курсового проекта разрабатывается прототип информационной системы контроля и управления доступом (СКУД) для университета.
Система моделирует работу современной биометрической платформы, предназначенной для контроля прохода студентов и сотрудников в корпуса и помещения университета.
Основные задачи системы:
- хранение профилей пользователей (студенты, сотрудники, гости);
- хранение биометрических шаблонов (лицо, голос);
- управление правами доступа к зонам университета;
- регистрация и хранение событий прохода;
- анализ отказов доступа;
- обеспечение массового импорта и экспорта данных.
- Язык программирования: Python
- Backend-фреймворк: FastAPI
- СУБД: MongoDB
- Аутентификация: JWT (логин/пароль)
- Контейнеризация: Docker + docker-compose
- Формат импорта/экспорта: JSON
Администратор системы имеет полный доступ к функциональности:
- создание и редактирование профилей пользователей;
- добавление и удаление биометрических шаблонов;
- управление зонами и устройствами доступа;
- назначение и изменение политик доступа;
- просмотр всех логов системы;
- выполнение массового импорта и экспорта данных.
Оператор безопасности имеет доступ к:
- просмотру событий прохода;
- фильтрации логов по различным параметрам;
- анализу отказов доступа;
- просмотру статистических отчётов.
Сущность описывает пользователя системы.
Поля:
- person_id
- full_name
- role (student / staff / guest)
- department
- status (active / blocked)
- created_at
- updated_at
Сущность описывает биометрический шаблон пользователя.
Поля:
- template_id
- person_id
- type (face / voice)
- quality_score
- device_id
- created_at
- version
Описывает зону доступа (корпус, помещение).
Поля:
- zone_id
- name
- building
- class
Описывает устройство контроля доступа (терминал).
Поля:
- device_id
- type (camera / microphone / terminal)
- zone_id
- firmware_version
Описывает правила доступа пользователя к зонам.
Поля:
- policy_id
- person_id
- allowed_zone_ids
- schedule (дни недели и временные интервалы)
- valid_from
- valid_to
Фиксирует попытку прохода через точку доступа.
Поля:
- event_id
- timestamp
- person_id (может быть null)
- device_id
- zone_id
- auth_method (face / voice / card)
- decision (ALLOW / DENY)
- reason
- recognition_score
- Администратор создаёт профиль пользователя.
- Добавляет один или несколько биометрических шаблонов.
- Назначает пользователю политику доступа.
- Устройство доступа отправляет запрос в API
/device/access-attempt. - Система:
- идентифицирует пользователя,
- проверяет статус профиля,
- проверяет наличие действующей политики доступа,
- проверяет соответствие расписанию.
- В системе создаётся запись AccessEvent.
- Возвращается решение ALLOW или DENY.
Каждая попытка прохода фиксируется вне зависимости от результата.
Это обеспечивает возможность последующего аудита и анализа.
- POST /auth/login
- GET /auth/me
- GET /people
- POST /people
- GET /people/{id}
- PUT /people/{id}
- POST /people/{id}/biometrics
- GET /people/{id}/biometrics
- DELETE /biometrics/{id}
- GET /zones
- POST /zones
- GET /devices
- POST /devices
- POST /policies
- GET /policies
- PUT /policies/{id}
- GET /events (фильтрация по периоду, зоне, решению)
- POST /device/access-attempt
- POST /export — экспорт всей базы данных
- POST /import — очистка базы и восстановление из JSON
Аналитика реализуется с использованием MongoDB Aggregation Pipeline.
Планируемые отчёты:
- Топ зон по количеству отказов.
- Распределение отказов по причинам.
- Количество проходов по зонам за выбранный период.
- Процент отказов по устройствам.
Экспорт:
- выгрузка всех коллекций в единый JSON-файл.
Импорт:
- очистка текущей базы данных,
- загрузка данных из файла,
- автоматическая инициализация тестовых данных при первом запуске.