Будь ласка, використовуйте цей ідентифікатор, щоб цитувати або посилатися на цей матеріал: https://er.chdtu.edu.ua/handle/ChSTU/8597
Повний запис метаданих
Поле DCЗначенняМова
dc.contributor.advisorЛАВДАНСЬКИЙ, Артем-
dc.contributor.authorАПІЛАТ, Денис-
dc.date.accessioned2026-03-15T16:03:59Z-
dc.date.available2026-03-15T16:03:59Z-
dc.date.issued2024-
dc.identifier.urihttps://er.chdtu.edu.ua/handle/ChSTU/8597-
dc.description.abstractМетою виконання кваліфікаційної роботи на здобуття освітнього ступеня «бакалавр» є аналіз та вдосконаленні систем бухгалтерського обліку персоналу з урахуванням їхньої безпеки. Це актуальна проблема, оскільки велика кількість конфіденційної інформації, такої як фінансові дані та персональні відомості, обробляються в таких системах щоденно. Загальний обсяг роботи становить 89 сторінок. У роботі 22 рисунки. Для виконання роботи використано 21 літературне джерело. Основними завданнями кваліфікаційної роботи є аналіз існуючих методів захисту інформаційних систем бухгалтерського обліку персоналу, визначення їхньої ефективності та розробку рекомендацій щодо підвищення рівня безпеки таких систем. У першому розділі розглядається значення систем бухгалтерського обліку персоналу та їхній внесок у сучасне управління підприємствами. Другий розділ присвячений дослідженню методів зберігання, обробки та передачі даних в інформаційній системі з метою забезпечення надійності та цілісності даних. Третій розділ описує процес вибору технологій для побудови інформаційної системи, підкреслюючи переваги обраного стеку технологій. У четвертому розділі поетапно розглядається створення інформаційної системи бухгалтерського обліку персоналу, починаючи з проектування та закінчуючи реалізацією та тестуванням системи. Особливу увагу приділено забезпеченню безпеки інформаційної системи бухгалтерського обліку персоналу у п'ятому розділі, де розглядаються основні заходи та технології, спрямовані на захист конфіденційності, цілісності та доступності даних. Реалізовані заходи безпеки включають використання сучасних протоколів шифрування, токенів безпеки, таких як JWT, та інструментів для контролю доступу, таких як Spring Security. Також детально описується ізольованість компонентів системи за допомогою контейнеризації та оркестрації, що забезпечує додатковий рівень захисту та управління.uk_UA
dc.subjectБУХГАЛТЕРСЬКА СИСТЕМА ОБЛІКУ ПЕРСОНАЛУuk_UA
dc.subjectШИФРУВАННЯuk_UA
dc.subjectБЕЗПЕКАuk_UA
dc.subjectКОНТЕЙНЕРИЗАЦІЯuk_UA
dc.subjectІЗОЛЯЦІЯuk_UA
dc.subjectРОБІТНИКuk_UA
dc.subjectКОРИСТУВАЧuk_UA
dc.titleЗахищена інформаційна система бухгалтерського обліку персоналуuk_UA
dc.typeBachelor Thesisuk_UA
Розташовується у зібраннях:125 Кібербезпека та захист інформації (Управління кібербезпекою та захист інформації)

Файли цього матеріалу:
Файл Опис РозмірФормат 
1_ТИТУЛКА_Апілат-merged.pdf
  Restricted Access
3.17 MBAdobe PDFПереглянути/Відкрити    Запит копії


Усі матеріали в архіві електронних ресурсів захищено авторським правом, усі права збережено.

Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА ІНФОРМАЦІЙНОЇ БЕЗПЕКИ ТА КОМП’ЮТЕРНОЇ ІНЖЕНЕРІЇ
ПОЯСНЮВАЛЬНА ЗАПИСКА
до кваліфікаційної роботи бакалавра
на тему: «Захищена інформаційна система
бухгалтерського обліку персоналу»
ЧДТУ.242238.001 ПЗ
Виконав: студент 4 курсу, групи БІУ-2008
спеціальності 125 – «Кібербезпека»
за освітньою програмою – «Управління
інформаційною безпекою»
Денис АПІЛАТ
Керівник
к.т.н., доцент
Артем ЛАВДАНСЬКИЙ
Рецензент
к.т.н., доцент кафедри комп'ютерної інженерії та
інформаційних технологій Черкаського
державного бізнес-коледжу
Сергій БУРМІСТРОВ
«ЗАХИСТ ДОЗВОЛЯЮ»
Завідувач кафедри ІБ та КІ
д.т.н., професор ___________ Віра БАБЕНКО
Черкаси 2024 року
Форма № Н-9.01
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
Факультет: інформаційних технологій і систем
Кафедра: інформаційної безпеки та комп’ютерної інженерії
Освітньо-кваліфікаційний рівень: Бакалавр
Спеціальність 125 – Кібербезпека
Освітня програма Управління інформаційною безпекою
«ЗАТВЕРДЖУЮ»
Завідувач кафедри ІБ та КІ
д.т.н., професор _____________ Віра БАБЕНКО
«28» лютого 2024 року
ЗАВДАННЯ
на кваліфікаційну роботу бакалавра студенту
Апілату Денису Анатолійовичу
(прізвище, ім‘я, по батькові)
1. Тема роботи: Захищена інформаційна система бухгалтерського обліку персоналу
Керівник роботи: к.т.н., доцент Лавданський Артем Олександрович
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)
затверджені наказом університету від «26» лютого2024 р. № 60/04
2. Строк подання студентом роботи: 03.06.2024 р.
3. Вихідні дані до роботи:
Тип системи: Система бухгалтерського обліку персоналу. Кількість користувачів системи:
не менше 50. Реєстрація та аутентифікація користувачів. Зберігання та обробка
персональної інформації. Управління ролями та правами доступу. Забезпечення безпеки даних.
Фільтрація та контроль доступу до ресурсів системи. Мікросервісна архітектура.
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити):
Вступ
1. Системи бухгалтерського обліку персоналу. важливість захищення систем.
2. Дбуохсглаілдтжеернсньякомгеотообдліівкузбпееррісгоаннанялу, обробки та передачі даних в інформаційній системі.
3. Вибір технологій для побудови інформаційної системи.
4. Створення інформаційної системи бухгалтерського обліку персоналу.
5. Забезпечення безпеки інформаційної системи бухгалтерського обліку персоналу.
Висновки
Додатки.
Список використаних джерел.
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень, плакатів):
1. Специфікація
2. Текст програми
3. Інструкція користувача
6. Консультанти розділів роботи:
Розділ Прізвище, ініціали Підпис, дата
консультанта завдання видав завдання прийняв
7. Дата видачі завдання: 28 лютого 2024 року
КАЛЕНДАРНИЙ ПЛАН
Термін
№ з/п Назва етапів роботи виконання Примітка
етапів роботи
1 Збір матеріалу 01.03 – 14.03 виконано
2 Обробка матеріалу 15.03 – 20.03 виконано
3 Дослідження методів зберігання, обробки та виконано
передачі даних 21.03-28.03
4 Розробка архітектури системи 29.03-05.04 виконано
5 Розробка моделі даних 6.04-15.04 виконано
6 Розробка програмного забезпечення та його
обґрунтування 16.04-05.05 виконано
7 Виконання розрахунків системи 06.05-10.05 виконано
8 Оформлення пояснювальної записки 11.05-20.05 виконано
9 Оформлення графічного матеріалу 21.05-25.05 виконано
10 Подання роботи на відгук та рецензування 26.05-01.06 виконано
Студент ___________________________ Денис АПІЛАТ
(підпис)
Керівник роботи ___________________________ Артем ЛАВДАНСЬКИЙ
(підпис)
АНОТАЦІЯ
Метою виконання кваліфікаційної роботи на здобуття освітнього ступеня
«бакалавр» є аналіз та вдосконаленні систем бухгалтерського обліку персоналу
з урахуванням їхньої безпеки. Це актуальна проблема, оскільки велика кількість
конфіденційної інформації, такої як фінансові дані та персональні відомості,
обробляються в таких системах щоденно.
Загальний обсяг роботи становить 89 сторінок. У роботі 22 рисунки. Для
виконання роботи використано 21 літературне джерело.
Основними завданнями кваліфікаційної роботи є аналіз існуючих методів
захисту інформаційних систем бухгалтерського обліку персоналу, визначення
їхньої ефективності та розробку рекомендацій щодо підвищення рівня безпеки
таких систем.
У першому розділі розглядається значення систем бухгалтерського обліку
персоналу та їхній внесок у сучасне управління підприємствами.
Другий розділ присвячений дослідженню методів зберігання, обробки та
передачі даних в інформаційній системі з метою забезпечення надійності та
цілісності даних.
Третій розділ описує процес вибору технологій для побудови
інформаційної системи, підкреслюючи переваги обраного стеку технологій.
У четвертому розділі поетапно розглядається створення інформаційної
системи бухгалтерського обліку персоналу, починаючи з проектування та
закінчуючи реалізацією та тестуванням системи.
Особливу увагу приділено забезпеченню безпеки інформаційної системи
бухгалтерського обліку персоналу у п'ятому розділі, де розглядаються основні
заходи та технології, спрямовані на захист конфіденційності, цілісності та
доступності даних. Реалізовані заходи безпеки включають використання
сучасних протоколів шифрування, токенів безпеки, таких як JWT, та
інструментів для контролю доступу, таких як Spring Security. Також детально
описується ізольованість компонентів системи за допомогою контейнеризації та
оркестрації, що забезпечує додатковий рівень захисту та управління.
Ключові слова: БУХГАЛТЕРСЬКА СИСТЕМА ОБЛІКУ ПЕРСОНАЛУ,
ШИФРУВАННЯ, БЕЗПЕКА, КОНТЕЙНЕРИЗАЦІЯ, ІЗОЛЯЦІЯ, РОБІТНИК,
КОРИСТУВАЧ
SUMMARY
The purpose of the qualification work for obtaining a bachelor's degree is the
analysis and improvement of personnel accounting systems, taking into account their
security. This is a pressing issue because such systems handle large amounts of
sensitive information such as financial data and personal information every day.
The total volume of work is 89 pages. There are 22 drawings in the work. 21
literary sources were used to perform the work.
The main tasks of the qualification work are the analysis of existing methods of
protection of personnel accounting information systems, the determination of their
effectiveness and the development of recommendations for improving the security
level of such systems.
The first chapter examines the importance of personnel accounting systems and
their contribution to modern enterprise management.
The second section is devoted to the study of methods of data storage, processing
and transmission in the information system in order to ensure the reliability and
integrity of the data.
The third section describes the process of choosing technologies for building an
information system, focusing on the advantages of the chosen technology stack.
In the fourth chapter, the creation of an information system of personnel
accounting is considered step by step, starting with the design and ending with the
implementation and testing of the system.
Particular attention is paid to ensuring the security of the personnel accounting
information system in the fifth chapter, where the main measures and technologies
aimed at protecting the confidentiality, integrity and availability of data are considered.
Security measures implemented include the use of modern encryption protocols,
security tokens such as JWT, and access control tools such as Spring Security. It also
details the isolation of system components through containerization and orchestration,
which provides an additional layer of protection and control.
Keywords: PERSONNEL ACCOUNTING SYSTEM, ENCRYPTION,
SECURITY, CONTAINERIZATION, ISOLATION, EMPLOYEE, USER
ЗМІСТ
ВСТУП......................................................................................................................4
1 СИСТЕМИ БУХГАЛТЕРСЬКОГО ОБЛІКУ ПЕРСОНАЛУ. ВАЖЛИВІСТЬ
ЗАХИЩЕННЯ СИСТЕМ БУХГАЛТЕРСЬКОГО ОБЛІКУ ПЕРСОНАЛУ.......7
1.1 Поняття про системи бухгалтерського обліку персоналу .............. 7
1.2 Приклади систем бухгалтерського обліку персоналу.....................8
1.3 Важливість захищення систем бухгалтерського обліку персоналу
.................................................................................................................10
2 ДОСЛІДЖЕННЯ МЕТОДІВ ЗБЕРІГАННЯ, ОБРОБКИ ТА ПЕРЕДАЧІ
ДАНИХ В ІНФОРМАЦІЙНІЙ СИСТЕМІ..........................................................12
2.1 Передача даних між сервісами по протоколу HTTP в форматі
JSON........................................................................................................12
2.2 Зберігання та маніпулювання даними в різноманітних СУБД.....13
2.3 SQL як мова для формування запитів до БД................................. 15
3 ВИБІР ТЕХНОЛОГІЙ ДЛЯ ПОБУДОВИ ІНФОРМАЦІЙНОЇ СИСТЕМИ.17
3.1 Java та JavaScript як мова програмуванння....................................17
3.2 Back-end фреймворк Spring.............................................................19
3.3 Hibernate фреймворк для доступу до бази даних...........................20
3.4 Front-end фреймворк Vue.js.............................................................22
3.5 Axios як бібліотека для спілкування з ендпоїнтами сервісів........23
3.6 Переваги PostgreSQL як СУБД.......................................................24
3.7 Docker контейнеризація...................................................................25
3.8 Розроблений функціонал системи..................................................26
4 СТВОРЕННЯ ІНФОРМАЦІЙНОЇ СИСТЕМИ БУХГАЛТЕРСЬКОГО
ОБЛІКУ ПЕРСОНАЛУ.........................................................................................28
4.1 Створення базового Spring проекту та його конфігурація............28
ЧДТУ.242238.001 ПЗ
Змн. Арк. № докум. Підпис Дата
РозрКобив Апілат Д. А.
Керівник Лавданський А Захищена інформаційна Літ. Лист Листів
а система бухгалтерського 2 89
Рецензент Бурмістров С. обліку персоналу
Н.Контроль Гресько С.О. Кафедра ІБ та КІ
ф Пояснювальна записка
Затвердив Бабенко В.Г. гр. БІУ-2008
е
д
р
а
К
К
-
0
6
4.2 Створення бази даних та всіх необхідних таблиць для
інформаційної системи..........................................................................30
4.3 Створення Vue.js проекту та його базова конфігурація................34
4.4 Створення сервісів та репозиторіїв для спілкування з базою даних
за допомогою фреймворку Hibernate....................................................37
4.5 Створення axios запитів для спілкування з back-end сервісом.....39
4.6 Створення ux/ui дизайну за допомогою element-ui-plus................40
4.7 Докер контейнеризація для забезпечення ізольованості
мікросервісів системи............................................................................41
5 ЗАБЕЗПЕЧЕННЯ БЕЗПЕКИ ІНФОРМАЦІЙНОЇ СИСТЕМИ
БУХГАЛТЕРСЬКОГО ОБЛІКУ ПЕРСОНАЛУ.................................................43
5.1 Безпека за допомогою Spring Security............................................43
5.2 Захищена авторизація з використанням JWT-токенів та
фільтрація вхідних запитів....................................................................45
5.3 Реалізація сесійності з встановленням часу життя сесії ...............50
5.4 Сервіс для перевірки сесій та авторизація доступу до закритих
ендпоїнтів...............................................................................................50
5.5 Хешування паролів..........................................................................53
5.6 Docker контейнеризація мікросервісів та ізольованість бази даних
.................................................................................................................54
ВИСНОВКИ...........................................................................................................56
ДОДАТКИ:
А – 482.ЧДТУ.42238-01 Захищена інформаційна система бухгалтерського
обліку персоналу
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ............................................................. 87
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 3
ВСТУП
В сучасному світі інформаційні системи є основою функціонування
майже всіх аспектів нашого життя. Від фінансових операцій та медичних
записів до соціальних мереж і електронної комерції – ми постійно взаємодіємо
з даними, які передаються, зберігаються та обробляються за допомогою різних
технологій. У зв'язку з цим питання безпеки в інформаційних системах стає
надзвичайно важливим.
Безпека інформаційних систем охоплює комплекс заходів, спрямованих
на захист конфіденційності, цілісності та доступності даних. Конфіденційність
означає, що інформація доступна лише тим, хто має на це право. Цілісність
забезпечує точність і повноту даних, запобігаючи їх несанкціонованій зміні.
Доступність гарантує, що інформація і системи будуть доступні для
використання в потрібний час.
Ризики, пов'язані з безпекою інформаційних систем, включають
кіберзагрози, які можуть мати різні форми, такі як віруси, трояни, фішингові
атаки, DDoS атаки, а також інсайдерські загрози, де небезпека походить
зсередини організації. Кіберзлочинці постійно вдосконалюють свої методи,
використовуючи новітні технології для здійснення атак, що робить питання
безпеки ще більш критичним.
Забезпечення безпеки інформаційних систем вимагає багаторівневого
підходу, що включає технічні, адміністративні та фізичні заходи захисту.
Технічні заходи включають використання антивірусного програмного
забезпечення, міжмережевих екранів, шифрування даних та систем виявлення
вторгнень. Адміністративні заходи охоплюють розробку політик безпеки,
навчання співробітників та регулярний аудит безпеки. Фізичні заходи
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 4
спрямовані на захист обладнання та приміщень від несанкціонованого
доступу.
Організації також повинні бути готові до реагування на інциденти
безпеки, розробляючи плани дій у разі виникнення загроз, забезпечуючи
резервне копіювання даних та відновлення після інцидентів. Важливим
аспектом є регулярне оновлення систем і програмного забезпечення для
усунення вразливостей.
Загалом, безпека інформаційних систем є не лише технологічним
викликом, але й стратегічним завданням, яке потребує залучення всіх рівнів
управління та інтеграції в корпоративну культуру організації. Лише
комплексний підхід дозволить ефективно захищати інформаційні ресурси та
забезпечувати стійкість до кіберзагроз.
Мета дослідження полягає в аналізі та вдосконаленні систем
бухгалтерського обліку персоналу з урахуванням їхньої безпеки. Це актуальна
проблема, оскільки велика кількість конфіденційної інформації, такої як
фінансові дані та персональні відомості, обробляються в таких системах
щоденно.
Необхідність використання систем бухгалтерського обліку
персоналу полягає у забезпеченні точного обліку фінансових операцій та
управлінні персоналом, що є критичними завданнями для ефективного
функціонування будь-якої організації.
Практична значимість дослідження полягає у можливості покращити
ефективність управління фінансами та персоналом за допомогою застосування
відповідних заходів безпеки в інформаційних системах.
Цілі та завдання дослідження включають аналіз існуючих методів
захисту інформаційних систем бухгалтерського обліку персоналу, визначення
їхньої ефективності та розробку рекомендацій щодо підвищення рівня безпеки
таких систем.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 5
Структура роботи включає в себе огляд літератури щодо безпеки
інформаційних систем, аналіз існуючих методів захисту, опис методології
дослідження, результати та їх обґрунтування, а також висновки та
рекомендації щодо вдосконалення систем бухгалтерського обліку персоналу
з точки зору безпеки.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 6
1 СИСТЕМИ БУХГАЛТЕРСЬКОГО ОБЛІКУ ПЕРСОНАЛУ.
ВАЖЛИВІСТЬ ЗАХИЩЕННЯ СИСТЕМ БУХГАЛТЕРСЬКОГО
ОБЛІКУ ПЕРСОНАЛУ
1.1 Поняття про системи бухгалтерського обліку персоналу
Системи бухгалтерського обліку персоналу (СБОП) — це спеціалізовані
програмні рішення, призначені для управління та обліку інформації про
працівників організації. Вони допомагають автоматизувати численні процеси,
пов'язані з управлінням персоналом, забезпечують точність даних та
підвищують ефективність роботи кадрових служб.
Однією з головних функцій СБОП є збір та зберігання даних про
працівників. Це включає особисту інформацію (ім'я, адреса, контактні дані), а
також дані про трудову діяльність (посади, підвищення, переведення). Крім
того, системи зберігають інформацію про заробітну плату, бонуси та інші
виплати.
Обробка інформації є наступним важливим аспектом роботи СБОП. Це
включає розрахунок заробітної плати з урахуванням податків, відрахувань і
бонусів, а також аналіз даних про робочий час, відпустки, лікарняні та інші
види відсутностей. Системи дозволяють автоматизувати ці процеси, що
значно знижує ймовірність помилок та економить час.
Ще однією важливою функцією є аналіз та звітність. СБОП надають
можливість створювати звіти про витрати на персонал, моніторити
продуктивність працівників та аналізувати плинність кадрів. Це допомагає
керівникам приймати обґрунтовані рішення на основі точних даних.
Планування та прогнозування також є невід'ємною частиною
функціоналу СБОП. Системи допомагають визначати потреби в нових
працівниках, планувати витрати на заробітну плату та інші кадрові витрати, а
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 7
також прогнозувати розвиток кадрового потенціалу. Це дозволяє організаціям
бути готовими до майбутніх викликів та забезпечувати стабільний розвиток.
Однією з ключових переваг використання СБОП є ефективність.
Автоматизація рутинних процесів дозволяє скоротити час на їх виконання та
зменшити ймовірність помилок. Крім того, системи забезпечують прозорість
даних, що дозволяє швидко отримувати актуальну інформацію про персонал
для прийняття обґрунтованих рішень.
СБОП також покращують аналіз та контроль даних, що дозволяє
виявляти тенденції та проблеми на ранніх стадіях. Це допомагає керівникам
своєчасно реагувати на виклики та забезпечувати стабільну роботу організації.
1.2 Приклади систем бухгалтерського обліку персоналу
Існує безліч систем бухгалтерського обліку персоналу, кожна з яких має
свої унікальні особливості та переваги. Давайте розглянемо декілька
найпоширеніших та найбільш ефективних систем, які широко
використовуються у різних організаціях.
SAP SuccessFactors
SAP SuccessFactors - це потужна хмарна платформа для управління
людськими ресурсами, яка пропонує широкий спектр інструментів для
управління персоналом, включаючи облік працівників, управління
продуктивністю, планування кар'єри, навчання та розвиток.
Особливості:
 Інтеграція з іншими продуктами SAP.
 Висока масштабованість.
 Можливість кастомізації під потреби компанії.
Oracle HCM Cloud
Oracle HCM Cloud - це комплексне рішення для управління людськими
ресурсами, яке забезпечує повний цикл управління персоналом від найму до
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 8
виходу на пенсію. Платформа включає функції для обліку працівників,
управління продуктивністю, планування робочої сили та аналітики.
Особливості:
 Потужні аналітичні інструменти.
 Інтеграція з іншими продуктами Oracle.
 Високий рівень безпеки даних.
Workday
Workday - це хмарна платформа для управління людськими ресурсами
та фінансами, яка пропонує широкий спектр функцій для управління
персоналом, включаючи облік працівників, управління продуктивністю,
планування робочої сили та аналітики.
Особливості:
 Інтуїтивно зрозумілий інтерфейс.
 Можливості для мобільного доступу.
 Потужні аналітичні інструменти.
BambooHR
BambooHR - це система управління людськими ресурсами, призначена
для малих та середніх підприємств. Вона забезпечує облік працівників,
управління відсутностями, звітування та аналітику, а також інтеграцію з
іншими інструментами для управління персоналом.
Особливості:
 Простота використання.
 Доступність для малих та середніх підприємств.
 Можливості для кастомізації.
ADP Workforce Now
ADP Workforce Now - це повністю інтегрована платформа для
управління людськими ресурсами, заробітною платою, перевагами та
продуктивністю. Вона забезпечує облік працівників, управління
відсутностями, звітування та аналітику.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 9
Особливості:
 Інтеграція з іншими продуктами ADP.
 Висока масштабованість.
 Потужні інструменти для управління заробітною платою.
Zoho People
Zoho People - це хмарна система для управління людськими ресурсами,
яка пропонує інструменти для обліку працівників, управління відсутностями,
планування робочої сили та аналітики.
Особливості:
 Інтеграція з іншими продуктами Zoho.
 Доступність для малих та середніх підприємств.
 Простота використання.
1.3 Важливість захищення систем бухгалтерського обліку персоналу
Захист систем бухгалтерського обліку персоналу є критично важливим
аспектом для будь-якої організації. Оскільки ці системи містять
конфіденційну інформацію про працівників, включаючи особисті дані,
інформацію про заробітну плату, продуктивність і інші важливі аспекти,
захист цих даних має бути пріоритетним завданням.
Основні Причини для Захисту Систем Бухгалтерського Обліку
Персоналу:
1. Захист Конфіденційної Інформації
Системи бухгалтерського обліку персоналу зберігають значний обсяг
конфіденційних даних. Це включає особисту інформацію працівників, таку як
імена, адреси, контактні дані, номери соціального страхування, а також дані
про заробітну плату та банківські реквізити. Несанкціонований доступ до цих
даних може призвести до крадіжки особистих даних, шахрайства або інші
зловживання.
2. Дотримання Правових та Регуляторних Вимог
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 10
Багато країн мають строгі закони та регуляції щодо захисту
персональних даних. Недотримання цих вимог може призвести до серйозних
юридичних наслідків, включаючи штрафи, санкції та судові позови.
Забезпечення належного захисту систем бухгалтерського обліку персоналу
допомагає організаціям дотримуватися цих законодавчих вимог.
3. Підтримка Репутації Компанії
Безпека даних є важливим аспектом репутації компанії. Порушення
безпеки даних може суттєво зашкодити репутації організації, підірвати довіру
працівників, клієнтів та партнерів. Навпаки, високий рівень безпеки даних
підвищує довіру та лояльність працівників, що позитивно впливає на загальну
атмосферу в компанії.
4. Запобігання Внутрішнім Загрозам
Захист систем бухгалтерського обліку персоналу також включає захист
від внутрішніх загроз, таких як зловживання з боку співробітників.
Встановлення чітких правил доступу, моніторинг активності користувачів та
використання технологій для виявлення аномальної поведінки допомагають
запобігти потенційним внутрішнім загрозам.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 11
2 ДОСЛІДЖЕННЯ МЕТОДІВ ЗБЕРІГАННЯ, ОБРОБКИ ТА ПЕРЕДАЧІ
ДАНИХ В ІНФОРМАЦІЙНІЙ СИСТЕМІ
2.1 Передача даних між сервісами по протоколу HTTP в форматі
JSON
Передача даних між сервісами за допомогою протоколу HTTP у форматі
JSON є стандартним підходом у сучасній веб-розробці. HTTP (HyperText
Transfer Protocol) є основним протоколом для передачі даних у мережі
Інтернет, а JSON (JavaScript Object Notation) — легким та зрозумілим
форматом для обміну даними.
Основи HTTP
HTTP — це протокол прикладного рівня, що дозволяє клієнтам
(наприклад, веб-браузерам) та серверам обмінюватися інформацією. Основні
компоненти HTTP включають:
 Запити (Requests): Клієнт надсилає запит на сервер, який
містить метод HTTP (GET, POST, PUT, DELETE і т.д.), URL, заголовки
та, іноді, тіло запиту.
 Відповіді (Responses): Сервер відповідає на запит, надаючи
статусний код (наприклад, 200 для успішного запиту), заголовки та,
іноді, тіло відповіді.
Основи JSON
JSON — це текстовий формат для представлення структурованих даних
на основі синтаксису JavaScript. JSON легкий для читання людьми та легко
обробляється машинами. Основні компоненти JSON включають:
Об'єкти: Пара "ключ-значення", що оточені фігурними дужками {}.
Масиви: Список значень, що оточені квадратними дужками [].
Передача Даних у Форматі JSON за допомогою HTTP
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 12
Для передачі даних між сервісами за допомогою HTTP у форматі JSON,
зазвичай використовуються методи POST, GET, PUT та DELETE. Давайте
розглянемо приклади використання цих методів.
2.2 Зберігання та маніпулювання даними в різноманітних СУБД
Системи управління базами даних (СУБД) є основою сучасних
інформаційних систем, забезпечуючи ефективне зберігання, доступ і
маніпулювання даними. Існує багато типів СУБД, кожен з яких має свої
особливості, переваги та недоліки. Основні типи включають реляційні,
документоорієнтовані, графові та інші бази даних. Розглянемо детальніше ці
типи та методи роботи з ними.
Реляційні СУБД (RDBMS)
Реляційні СУБД є найбільш поширеними типами баз даних. Вони
організовані у вигляді таблиць (відношень) і використовують мову SQL
(Structured Query Language) для маніпулювання даними.
Приклади реляційних СУБД:
 MySQL: Відкритий і дуже популярний вибір для веб-додатків.
 PostgreSQL: Потужна СУБД з підтримкою багатьох розширених
функцій.
 Oracle: Комерційна СУБД, яка часто використовується в
корпоративному середовищі.
 Microsoft SQL Server: Відома СУБД від Microsoft, яка
інтегрується з іншими продуктами компанії.
Документоорієнтовані СУБД (NoSQL)
Документоорієнтовані СУБД зберігають дані у форматі документів,
найчастіше використовують JSON або BSON. Вони забезпечують більшу
гнучкість у структурі даних порівняно з реляційними СУБД.
Приклади документоорієнтованих СУБД:
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 13
 MongoDB: Один з найбільш популярних NoSQL баз даних, що
використовує JSON-подібні документи.
 CouchDB: Орієнтована на надійність і простоту використання з
можливістю синхронізації.
Графові СУБД
Графові СУБД зберігають дані у вигляді вузлів і ребер, що дозволяє
ефективно моделювати та запитувати зв’язки між даними.
Приклади графових СУБД:
 Neo4j: Популярна графова база даних, яка використовує мову
запитів Cypher.
 ArangoDB: Гібридна база даних, яка підтримує графові,
документоорієнтовані та ключ-значення моделі.
Ключ-значення СУБД
Ключ-значення СУБД зберігають дані як пари "ключ-значення". Цей
тип баз даних ідеально підходить для швидкого доступу до даних, де
структура значень не має значення.
Приклади ключ-значення СУБД:
 Redis: Високошвидкісна, відкрито доступна СУБД, часто
використовувана для кешування.
 Riak: Розподілена ключ-значення база даних з високою
надійністю.
Різні типи СУБД забезпечують різні можливості та підходи до
зберігання та маніпулювання даними. Вибір СУБД залежить від конкретних
потреб проекту, обсягу даних, структури даних та вимог до продуктивності.
Використання реляційних СУБД, документоорієнтованих баз даних, графових
СУБД та ключ-значення баз даних дозволяє розробникам ефективно
вирішувати різноманітні завдання зі зберігання та обробки даних.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 14
2.3 SQL як мова для формування запитів до БД
SQL (Structured Query Language) є стандартизованою мовою для
управління та маніпулювання реляційними базами даних (RDBMS). Вона
забезпечує інструменти для створення, читання, оновлення та видалення
даних у базах даних, а також для управління структурою бази даних. SQL
використовується у багатьох популярних СУБД, таких як MySQL, PostgreSQL,
Oracle, Microsoft SQL Server та інші.
Основні Концепції SQL
SQL складається з різних типів операторів, які можна поділити на кілька
основних категорій:
1. DDL (Data Definition Language) - Оператори для визначення
структури бази даних:
 CREATE: Створення нових таблиць або інших об'єктів бази
даних.
 ALTER: Зміна існуючих структур бази даних.
 DROP: Видалення таблиць або інших об'єктів бази даних.
2. DML (Data Manipulation Language) - Оператори для маніпулювання
даними:
 SELECT: Вибірка даних з бази даних.
 INSERT: Вставка нових записів у таблицю.
 UPDATE: Оновлення існуючих записів у таблиці.
 DELETE: Видалення записів з таблиці.
3. DCL (Data Control Language) - Оператори для управління доступом
до даних:
 GRANT: Надання прав користувачам.
 REVOKE: Відкликання прав у користувачів.
4. TCL (Transaction Control Language) - Оператори для управління
транзакціями:
 COMMIT: Фіксація транзакції.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 15
 ROLLBACK: Відкат транзакції.
Приклад sql скрипта для створення таблиці:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
position VARCHAR(50),
salary DECIMAL(10, 2));
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 16
3 ВИБІР ТЕХНОЛОГІЙ ДЛЯ ПОБУДОВИ ІНФОРМАЦІЙНОЇ
СИСТЕМИ
3.1 Java та JavaScript як мова програмуванння
Java є об'єктно-орієнтованою мовою програмування, розробленою
компанією Sun Microsystems (пізніше придбаною Oracle). Вона відома своєю
платформонезалежністю, що означає, що програми, написані на Java, можуть
запускатися на будь-якому пристрої, який має відповідний віртуальний
машину Java (JVM) [1-6].
Деякі ключові характеристики Java включають:
 Об'єктно-орієнтованість: Java підтримує об'єктно-орієнтований
підхід до програмування, де програма складається з класів і об'єктів, що
співпрацюють один з одним [1].
 Платформонезалежність: Код Java компілюється в байт-код,
який виконується на JVM. Це дозволяє запускати Java-програми на будь-
якому пристрої з відповідною версією JVM [1].
 Безпека: Java має вбудовані механізми безпеки, які дозволяють
виконувати код безпечно в обмеженому середовищі [1, 6].
 Багатопоточність: Java підтримує одночасне виконання кількох
потоків, що дозволяє використовувати ресурси пристрою ефективно [1].
 Портативність: Якщо JVM доступний для певної платформи,
програми Java можуть бути запущені на цій платформі без змін [1].
JavaScript
JavaScript є скриптовою мовою програмування, розробленою компанією
Netscape. Вона широко використовується для розробки веб-додатків і веб-
сайтів, а також для розробки серверних додатків (за допомогою Node.js).
Деякі ключові характеристики JavaScript включають [7]:
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 17
 Динамічна типізація: JavaScript використовує слабку, динамічну
типізацію, що означає, що тип змінної визначається автоматично в
залежності від значення, яке вона має.
 Функціональна програмування: JavaScript підтримує
функціональну парадигму програмування, що дозволяє створювати
функції в якості об'єктів першого класу.
 Асинхронність: JavaScript використовує асинхронний підхід до
програмування для взаємодії з браузером та виконання інших завдань,
що не блокують основний потік виконання.
 Взаємодія з HTML/CSS: JavaScript може динамічно змінювати
вміст та стилізацію веб-сторінки, що робить його потужним
інструментом для створення інтерактивних інтерфейсів.
 Розширюваність: За допомогою бібліотек і фреймворків, таких
як React, Angular або Vue.js, JavaScript може бути використаний для
розробки складних веб-додатків.
Ці мови програмування входять в п’ятірку найпопулярніших для
комерційного використання.
Рисунок 3.1 – Статистика використання мов програмування
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 18
Хоча Java та JavaScript мають різні використання та філософії, вони є
важливими мовами програмування для сучасної розробки програмного
забезпечення. Вибір між ними залежить від конкретного завдання: Java
підходить для великих корпоративних проектів та мобільних додатків, тоді як
JavaScript ідеально підходить для розробки веб-додатків та створення
динамічного контенту на веб-сторінках.
3.2 Back-end фреймворк Spring
Spring є одним з найпопулярніших фреймворків для розробки back-end
додатків на мові програмування Java. Він надає широкий спектр інструментів
та бібліотек для розробки різноманітних застосунків, включаючи веб-додатки,
мікросервіси, API та інше. Ось деякі ключові компоненти та особливості
Spring [8]:
Ключові Компоненти:
 Spring Core Container: Це основа фреймворку, яка надає інверсію
керування (IoC) та внедрення залежностей (DI), що спрощує створення
та управління об'єктами у додатку [8].
 Spring MVC: Цей модуль дозволяє розробникам створювати
веб-додатки та API за допомогою патерну Model-View-Controller (MVC)
[8].
 Spring Boot: Spring Boot є розширенням Spring, яке полегшує
створення самостійних, вбудованих та готових до використання
додатків з мінімальними конфігураціями [9].
 Spring Data: Цей модуль дозволяє взаємодіяти з різними
системами управління базами даних, включаючи Relational, NoSQL та
інші [10-11].
 Spring Security: Spring Security надає інструменти для
забезпечення безпеки додатків, включаючи аутентифікацію,
авторизацію та захист від атак [12].
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 19
Особливості:
 Легкість використання: Spring надає простий та зрозумілий
спосіб розробки додатків, забезпечуючи при цьому широкий
функціонал.
 Розширюваність: Фреймворк має велику кількість модулів та
бібліотек, які можна легко інтегрувати у додаток.
 Підтримка Компонентів: Spring підтримує велику кількість
стандартів та технологій, що дозволяє використовувати різноманітні
бібліотеки та інструменти [13, 14].
 Тестування: Spring надає зручні засоби для тестування додатків,
що дозволяє швидко виявляти та виправляти помилки [15].
Використання
Spring широко використовується в індустрії програмного забезпечення
для розробки різноманітних додатків, від веб-сайтів до корпоративних систем.
Він підтримується широкою спільнотою розробників та має велику кількість
документації та ресурсів для вивчення.
Spring є відмінним вибором для розробників, які шукають надійний та
розширюваний фреймворк для розробки back-end додатків на мові
програмування Java.
3.3 Hibernate фреймворк для доступу до бази даних
Hibernate є одним з найпопулярніших фреймворків для роботи з базами
даних у Java-додатках. Він надає зручний спосіб взаємодії з базами даних,
дозволяючи розробникам працювати з об'єктами Java, а не з SQL-запитами
напряму. Ось деякі ключові компоненти та особливості Hibernate [16]:
Ключові Компоненти:
 Hibernate Core: Це основний модуль Hibernate, який надає
основні функції для роботи з базами даних, такі як взаємодія з об'єктами,
виконання запитів та транзакцій.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 20
 Hibernate ORM (Object-Relational Mapping): Цей модуль
відповідає за перетворення об'єктів Java в реляційні дані та навпаки, що
дозволяє розробникам працювати з об'єктами без прямої роботи з SQL.
 Hibernate Annotations: Цей модуль надає можливість
використовувати анотації Java для визначення мапувань між об'єктами
та таблицями бази даних.
 Hibernate Query Language (HQL): Це мова запитів, аналогічна
SQL, але використовується для взаємодії з об'єктами Java, а не з
таблицями бази даних.
Особливості:
 Об'єктно-реляційне відображення (ORM): Hibernate дозволяє
використовувати об'єктно-орієнтований підхід до роботи з базами
даних, приховуючи деталі взаємодії з SQL.
 Легкість використання: Hibernate надає простий та зрозумілий
API для роботи з базами даних, що полегшує розробку додатків.
 Підтримка транзакцій: Hibernate надає механізми для
управління транзакціями, що дозволяє забезпечити цілісність даних у
додатку.
 Підтримка кешування: Hibernate підтримує кешування даних
для покращення продуктивності додатків.
 Підтримка відносин: Hibernate дозволяє визначати складні
відносини між об'єктами та таблицями бази даних.
Використання
Hibernate широко використовується в Java-додатках для забезпечення
доступу до баз даних. Він дозволяє розробникам працювати з базами даних
більш ефективно та зменшує кількість коду, необхідного для взаємодії з
базами даних. Hibernate є відмінним вибором для розробників, які шукають
зручний та потужний фреймворк для роботи з базами даних у своїх Java-
додатках.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 21
3.4 Front-end фреймворк Vue.js
Vue.js є одним з найпопулярніших фреймворків для розробки front-end
частини веб-додатків. Він відомий своєю простотою вивчення та
використанням, швидкістю та легкістю інтеграції у існуючі проекти. Ось деякі
ключові компоненти та особливості Vue.js [17]:
Ключові Компоненти:
 Vue Component: Основна одиниця розробки в Vue.js -
компонент, який містить HTML-код, JavaScript для логіки та CSS для
стилів.
 Vue Router: Модуль для управління маршрутизацією в додатку,
що дозволяє відображати різні компоненти на основі URL.
 Vuex: Це станова управлінська бібліотека для Vue.js, що
дозволяє ефективно управляти станом додатку.
 Vue CLI: Командний рядок для швидкого старту нових проектів
Vue.js та управління конфігурацією.
Особливості:
 Легкість вивчення: Vue.js має простий та зрозумілий синтаксис,
що дозволяє швидко вивчити фреймворк навіть початківцям.
 Прогресивний фреймворк: Vue.js можна поступово
впроваджувати в існуючі проекти, не потрібно переробляти весь код
відразу.
 Реактивність: Vue.js використовує реактивний підхід, що
дозволяє автоматично оновлювати відображення при зміні даних.
 Компонентна архітектура: Vue.js побудований на основі
компонентної архітектури, що спрощує роботу зі складними
інтерфейсами.
Використання
Vue.js широко використовується для розробки інтерактивних та
динамічних веб-інтерфейсів. Він підтримується активною спільнотою
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 22
розробників та має велику кількість розширень та бібліотек для різних потреб.
Vue.js є відмінним вибором для розробників, які шукають простий,
ефективний та розширюваний фреймворк для розробки front-end частини веб-
додатків.
3.5 Axios як бібліотека для спілкування з ендпоїнтами сервісів
Axios є популярною бібліотекою для виконання HTTP-запитів у веб-
додатках, яка дозволяє взаємодіяти з ендпоїнтами сервісів та отримувати або
надсилати дані. Ось деякі ключові компоненти та особливості Axios [18]:
Основні Функції:
 Виконання Запитів: Axios надає простий та зрозумілий спосіб
виконання HTTP-запитів, таких як GET, POST, PUT, DELETE.
 Підтримка Обіцянок: Axios використовує обіцянки (Promises)
для обробки результатів запитів, що дозволяє зручно управляти
асинхронним кодом.
 Перехоплення Помилок: Axios надає можливість
перехоплювати та обробляти помилки, які виникають під час виконання
запитів.
 Налаштування Запитів: Axios дозволяє налаштовувати різні
параметри запитів, такі як заголовки, дані запиту та інші.
Особливості:
 Легкість Використання: Axios має простий та зрозумілий API,
що дозволяє швидко використовувати його в проектах.
 Крос-платформенність: Axios підтримує виконання запитів як
у браузері, так і на серверній стороні (Node.js), що робить його
універсальним інструментом для роботи з HTTP.
 Інтерцептори: Axios дозволяє використовувати інтерцептори
для зміни або додавання параметрів до запитів та відповідей.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 23
 Підтримка Отримання та Надсилання Файлів: Axios надає
можливість легко відправляти та отримувати файли з сервера.
Використання
Axios широко використовується для виконання HTTP-запитів у веб-
додатках на базі JavaScript. Він дозволяє розробникам зручно спілкуватися з
ендпоїнтами сервісів та обмінюватися даними з сервером. Axios є популярним
вибором серед розробників завдяки своїй простоті використання та потужним
можливостям.
3.6 Переваги PostgreSQL як СУБД
PostgreSQL – це потужна та розширювана система управління базами
даних (СУБД), яка має кілька переваг порівняно з іншими СУБД. Ось деякі з
них [19]:
1. Відкритий джерело: PostgreSQL є відкритою системою, що означає,
що ви можете використовувати її безкоштовно, а також мати можливість
внести зміни в її вихідний код відповідно до вашого власного використання.
2. Підтримка стандартів SQL: PostgreSQL відповідає стандартам SQL,
що робить його сумісним з більшістю SQL-сумісних додатків та інструментів.
3. Розширені можливості: PostgreSQL має велику кількість вбудованих
функцій та розширень, які дозволяють вам робити складні операції з даними,
такі як геопросторові запити, повнотекстовий пошук, робота з JSON-даними
та інше.
4. Надійність та стійкість до відмов: PostgreSQL відомий своєю
надійністю та стійкістю до відмов, що робить його популярним вибором для
критичних застосунків.
5. Підтримка транзакцій: PostgreSQL підтримує транзакції, що
дозволяє вам гарантувати цілісність даних та відновлення у разі відмови.
6. Масштабованість: PostgreSQL може масштабуватися від невеликих
однокористувацьких застосунків до великих корпоративних систем.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 24
7. Активна спільнота розробників: PostgreSQL має велику та активну
спільноту розробників, яка надає підтримку та розвиток системи.
Ці переваги роблять PostgreSQL привабливим вибором для багатьох
проектів у сфері розробки програмного забезпечення.
3.7 Docker контейнеризація
Docker контейнеризація – це методологія упакування, доставки та
виконання програмного забезпечення у віртуалізованому середовищі,
відомому як контейнер. Контейнери дозволяють упаковувати програми та їх
залежності у стандартизований одиниці для забезпечення швидкого та
надійного розгортання [20, 21].
Основні переваги Docker контейнеризації включають:
 Портативність: Контейнери Docker можуть бути запущені на
будь-якому комп'ютері або сервері, що підтримує Docker, забезпечуючи
однакове середовище виконання для програм.
 Ізоляція: Кожен контейнер виконується відокремлено від інших,
що забезпечує безпеку та незалежність від середовища виконання.
 Легкість використання: Docker надає зручний інтерфейс
командного рядка та API для керування контейнерами, що робить його
легким у використанні.
 Ефективне використання ресурсів: Контейнери споживають
менше ресурсів порівняно з віртуальними машинами, оскільки вони
використовують спільний ядро операційної системи.
 Масштабованість: Docker дозволяє швидко та легко
масштабувати програми, додавати або зменшувати кількість
контейнерів в залежності від навантаження.
 Контроль версій: Docker дозволяє зберігати та керувати
версіями контейнерів, що полегшує розгортання та управління
програмами.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 25
Докер контейнеризація стала популярним інструментом для розробки,
тестування та розгортання програмного забезпечення через свою простоту
використання та ефективне використання ресурсів.
3.8 Розроблений функціонал системи
Функціонал:
1. Управління даними співробітників:
 Реєстрація та аутентифікація користувачів.
 Зберігання та обробка персональної інформації (ім'я, прізвище,
електронна пошта, номер телефону, вік, тощо).
 Управління ролями та правами доступу.
2. Забезпечення безпеки даних:
 Використання сучасних протоколів шифрування для передачі
даних між сервісами.
 Захист конфіденційної інформації за допомогою токенів
безпеки, таких як JWT.
 Фільтрація та контроль доступу до ресурсів системи з
використанням Spring Security.
3. Ефективне управління базами даних:
 Використання реляційних баз даних, таких як PostgreSQL, для
надійного зберігання та маніпулювання даними.
 Інтеграція з Hibernate для зручного доступу до даних та їх
обробки.
4. Масштабованість та продуктивність:
 Мікросервісна архітектура забезпечує гнучкість та можливість
швидкого розширення функціоналу системи.
 Використання фреймворків Spring та Vue.js дозволяє
створювати продуктивні та масштабовані додатки, що задовольняють
вимоги користувачів.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 26
5. Зручність та інтуїтивність інтерфейсу:
 Створення користувацького інтерфейсу з використанням Vue.js
та бібліотеки компонентів Element-UI Plus забезпечує зручність роботи
користувачів з системою.
 Інтуїтивний UX/UI дизайн дозволяє швидко навчитися та
ефективно використовувати функціонал системи.
6. Модернізація та оновлення:
 Легкість оновлення компонентів системи завдяки
контейнеризації та мікросервісній архітектурі.
 Використання CI/CD процесів для автоматизації розгортання та
оновлення системи.
7. Перегляд часу робітників:
 Реалізація функціоналу для обліку робочого часу
співробітників, що дозволяє зберігати інформацію про робочі зміни, час
початку та закінчення роботи.
 Відображення розкладу роботи співробітників для керівників та
самих співробітників, що сприяє підвищенню прозорості та
ефективності управління персоналом.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 27
4 СТВОРЕННЯ ІНФОРМАЦІЙНОЇ СИСТЕМИ БУХГАЛТЕРСЬКОГО
ОБЛІКУ ПЕРСОНАЛУ
4.1 Створення базового Spring проекту та його конфігурація
Для створення базового Spring проекту та його конфігурації можна
використати Spring Initializr та інтегровані середовища розробки, такі як
IntelliJ IDEA або Eclipse. Ось кроки для створення базового Spring проекту:
Створення проекту:
 Відкрийте Spring Initializr (https://start.spring.io/) (рис. 4.1).
 Виберіть "Maven Project" або "Gradle Project".
 Оберіть мову програмування (Java або Kotlin).
 Додайте залежності, наприклад "Spring Web" для веб-додатків.
Рисунок 4.1 – Генератор Spring проектів
Завантаження проекту:
 Завантажте створений проект як архів ZIP.
 Розпакування та імпорт проекту:
 Розпакуйте завантажений архів ZIP.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 28
 Відкрийте проект у вашій улюбленій інтегрованій середовищі
розробки (IntelliJ IDEA, Eclipse тощо).
Створення класу контролера:
 Створіть Java-клас у пакеті вашого проекту, наприклад,
com.example.demo.
 Позначте клас анотацією @RestController для створення REST-
контролера.
 Додайте метод у цьому класі та позначте його анотацією
@GetMapping("/") або іншою анотацією для обробки запитів (рис. 4.2).
Рисунок 4.2 – Стартовий контроллер
Запуск додатку:
 Запустіть додаток, натиснувши кнопку запуску у вашій
інтегрованій середовищі розробки.
 Додаток повинен запуститися на вбудованому сервері
(наприклад, Tomcat або Jetty) та слухати на вказаному порту.
 Це лише базовий приклад створення та конфігурації Spring
проекту. Далі можна додавати інші компоненти та конфігурації для
розширення функціональності вашого додатку (рис. 4.3).
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 29
Рисунок 4.3 – Відповідь контроллера
4.2 Створення бази даних та всіх необхідних таблиць для
інформаційної системи
Для створення бази даних та всіх необхідних таблиць для інформаційної
системи можна скористатися інструментом управління базами даних
PostgreSQL [19] або використати міграції баз даних у Spring [14].
Ось приклад створених міграцій баз даних, для зручного створення
таблиць в нових системах (рис. 4.4).:
Рисунок 4.4 – Міграції
Ось так виглядає вся структура бази даних (рис. 4.5):
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 30
Рисунок 4.5 – Структура бази даних
Взаємозв’язок даних в таблицях:
1. Таблиця “users” відповідає за зареєстрованих користувачів:
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 31
 id: унікальний ідентифікатор користувача, що генерується
автоматично за допомогою uuid_generate_v4() та є строкового типу
(varchar). Це поле є первинним ключем (primary key).
 email: електронна адреса користувача, яка є строкового типу.
 account_username: ім'я користувача для облікового запису, яке
також є строкового типу.
 phone_number: номер телефону користувача, строкового типу.
 first_name: ім'я користувача, строкового типу.
 last_name: прізвище користувача, строкового типу.
 age: вік користувача, цілочисельного типу (integer).
 password: захешований пароль користувача, строкового типу.
 role: роль користувача в системі, строкового типу.
 ip_address: IP-адреса користувача, строкового типу.
2. Таблиця “employees” відповідає за збереження даних про робітників:
 id: унікальний ідентифікатор співробітника, що генерується
автоматично за допомогою uuid_generate_v4() та є строкового типу
(varchar). Це поле є первинним ключем (primary key).
 email: електронна адреса співробітника, яка є строкового типу.
 phone_number: номер телефону співробітника, строкового
типу.
 first_name: ім'я співробітника, строкового типу.
 last_name: прізвище співробітника, строкового типу.
 age: вік співробітника, цілочисельного типу (integer).
 salary_per_hour: зарплата співробітника за годину роботи,
цілочисельного типу.
 hours_per_month: кількість годин, які співробітник працює за
місяць, цілочисельного типу.
 experience: рівень досвіду співробітника, цілочисельного типу.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 32
 role: роль співробітника в компанії, строкового типу.
 location: місце розташування співробітника, строкового типу,
що зсилається на таблицю employees_location через зовнішній ключ.
3. Таблиця “employees_location” відповідає за місця проживання
робітників:
 id: унікальний ідентифікатор місцезнаходження, який
генерується автоматично за допомогою uuid_generate_v4() та є
строкового типу (varchar). Це поле є первинним ключем (primary key).
 street: назва вулиці місцезнаходження, строкового типу.
 city: назва міста місцезнаходження, строкового типу.
 state: назва штату (регіону) місцезнаходження, строкового типу.
 country: назва країни місцезнаходження, строкового типу.
 zip: поштовий індекс місцезнаходження, строкового типу.
4. Таблиця “employees_work_schedule” дозволяє відстежувати графік
роботи співробітників, включаючи час початку та закінчення робочої зміни:
 id: унікальний ідентифікатор графіка роботи співробітника,
який генерується автоматично за допомогою uuid_generate_v4() та є
строкового типу (varchar). Це поле є первинним ключем (primary key).
 employee_id: ідентифікатор співробітника, до якого відноситься
цей графік роботи. Це поле є зовнішнім ключем (foreign key), яке
посилається на поле id таблиці employees.
 start_time: час початку робочої зміни співробітника, типу
TIMESTAMP.
 end_time: час закінчення робочої зміни співробітника, типу
TIMESTAMP.
5. Таблиця “employees_reserved” має таку саму структуру як і таблиця
“employees ”, але ця таблиця для видалених робітників.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 33
6. Таблиця “employees_reserved_location” має таку саму структуру як і
таблиця “employees_location ”, але ця таблиця для місць проживання
робітників.
7. Таблиця “employees_reserved_work_schedule” має таку саму
структуру як і таблиця “employees_work_schedule”, але ця таблиця для
видалених дат.
4.3 Створення Vue.js проекту та його базова конфігурація
Для створення Vue.js проекту та його базової конфігурації можна
скористатися Vue CLI (Command Line Interface), яка допомагає швидко
створювати та налаштовувати проекти Vue.js [17]. Ось кроки для створення та
конфігурації Vue.js проекту:
Встановлення Vue CLI:
 Встановіть Vue CLI, якщо він ще не встановлений, за
допомогою npm (Node Package Manager):
npm install -g @vue/cli
Створення нового проекту:
 Створіть новий проект Vue.js за допомогою Vue CLI:
vue create my-vue-app
 my-vue-app - назва вашого нового проекту. Ви можете обрати
будь-яку назву.
Вибір конфігурації:
 Під час створення нового проекту Vue CLI запитає вас про
конфігурацію проекту. Ви можете обрати базову конфігурацію або
скористатися додатковими опціями, такими як встановлення лінтера,
тестування тощо.
Запуск проекту:
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 34
 Після створення проекту перейдіть до каталогу проекту та
запустіть його за допомогою команди: npm run serve
 Ця команда запустить локальний сервер розробки, на якому
буде доступний ваш Vue.js додаток.
Перевірка роботи додатку:
 Відкрийте ваш веб-браузер і перейдіть за адресою, яка
виводиться у консолі (зазвичай це http://localhost:8080/).
Ви повинні побачити базовий шаблон Vue.js додатку.
Редагування та розширення:
 Відредагуйте файли у папці src для розробки вашого Vue.js
додатку.
 Додавайте компоненти, стилі та інші ресурси, які необхідні для
вашого додатку.
В файлі vite.config.js здійснюється конфігурація для всього додатку, ось
як цей файл виглядає в мене (рис. 4.6).
Рисунок 4.6 – Клєнтський конфігураційний файл
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 35
По ось такому шляху я здійснюється глобальна конфігурація стилів для
проекту (рис. 4.7).
Рисунок 4.7 – Файли стилів
Директорія мого проекту виглядає ось так (рис. 4.8).
Рисунок 4.8 – Директорія клієнта
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 36
4.4 Створення сервісів та репозиторіїв для спілкування з базою
даних за допомогою фреймворку Hibernate
Для створення сервісів та репозиторіїв для спілкування з базою даних за
допомогою фреймворку Hibernate у Spring проекті, вам потрібно додати
необхідні залежності та налаштувати конфігурацію [16]. Ось кроки, які можна
виконати:
 Додайте залежності для Hibernate та Spring Data JPA у вашому
файлі pom.xml (для Maven) (рис. 4.9).
Рисунок 4.9 – Залежності для доступу до бази даних
Створіть сутність, сутність повинна виглядати так само як дані в таблиці,
кожна сутність це кожна таблиця (рис. 4.10).
Рисунок 4.10 – Сутність EmployeeEntity
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 37
 Створіть репозиторій який буде наслідувати репозиторій
JpaRepository, ось приклад мого репозиторію(рис. 4.11).
Рисунок 4.11 – Репозиторій EmployeeRepository
 Створіть сервіс, який буде використовувати репозиторій як
доступ до бази даних(рис. 4.12).
Рисунок 4.12 – Сервіс EmployeeService
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 38
 Залишилось тільки створити контроллер для того щоб ділитися
даними в форматі JSON з іншим сервісом (рис. 4.13).
Рисунок 4.13 – Контроллер EmployeeController
4.5 Створення axios запитів для спілкування з back-end сервісом
Для того щоб отримати дані з сервера про робітників
використовуються axios запити [18].
Приклад використання:
 Ось приклад використання axios для отримання даних з
серверу(рис. 4.14)
Рисунок 4.14 – axios сервіс
4.6 Створення ux/ui дизайну за допомогою element-ui-plus
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 39
Element UI Plus є розширенням до популярного фреймворку Vue.js -
Element UI [17]. Для створення UX/UI дизайну за допомогою Element UI Plus,
вам потрібно налаштувати проект Vue.js для використання цього фреймворку.
Ось кроки, які можна виконати:
 Встановіть Element UI Plus у ваш проект Vue.js за допомогою
npm:
npm install element-ui-plus –save
 Після успішного встановлення ми зможемо використовувати
теги цієї бібліотеки в нашому коді.
 Приклад використання тегу для таблиці з цієї бібліотеки
(рис. 4.15).
Рисунок 4.15 – Таблиця з бібліотеки element-plus
Після успішного виконання запиту до сервера для надання інформації
про робітників та успішного мапінгу даних в таблицю, в нас на сайті повинна
відображатися таблиця робітників (рис. 4.16).
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 40
Рисунок 4.16 – Робітники в таблиці
4.7 Докер контейнеризація для забезпечення ізольованості
мікросервісів системи
Для створення контейнерів для мого сервісу та бази даних, необхідно
виконати такі дії [20, 21]:
 Перейти в корінь проекту.
 Створити файл docker-compose.yml (рис. 4.17).
Рисунок 4.17 – Докер-файл
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 41
 Скомпілюйте образ контейнера за допомогою команди:
docker build -t my-service .
 Після того як був скомпільований образ докер-контейнера, його
можна запустити командою: docker run -d -p 9100:9100 my-service
Після цих дій, сервіс та база даних буде ізольована в окремому Linux-
контейнері.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 42
5 ЗАБЕЗПЕЧЕННЯ БЕЗПЕКИ ІНФОРМАЦІЙНОЇ СИСТЕМИ
БУХГАЛТЕРСЬКОГО ОБЛІКУ ПЕРСОНАЛУ
5.1 Безпека за допомогою Spring Security
Spring Security - це потужний і високо налаштовуваний фреймворк для
забезпечення безпеки в додатках на основі Spring. Він забезпечує захист як на
рівні автентифікації, так і на рівні авторизації. Spring Security дозволяє легко
інтегрувати різні механізми безпеки, такі як аутентифікація за допомогою
базової аутентифікації (Basic Authentication), форм (Form-based
Authentication), OAuth2, JWT та інші [12].
Spring Security дозволяє забезпечити безпеку вашого додатку за
допомогою різних функціональностей і механізмів. Основні можливості
Spring Security включають:
 Аутентифікація: Spring Security дозволяє налаштувати різні
способи аутентифікації, такі як базова аутентифікація, форма
аутентифікації, аутентифікація на основі токенів, LDAP аутентифікація
та інші.
 Авторизація: Ви можете визначити правила авторизації для
ваших URL-адрес, щоб встановлювати, які ролі мають доступ до певних
ресурсів.
 Захист CSRF: Spring Security надає захист від атак на
міжсайтовий підроблення запитів (CSRF) за допомогою генерації та
перевірки токенів CSRF.
 Захист сесій: Spring Security дозволяє контролювати управління
сесіями та використання куки для зберігання ідентифікатора сесії.
 Шифрування паролів: Spring Security надає можливості для
шифрування паролів користувачів для збереження їх у безпечному
вигляді.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 43
 Фільтрація запитів: Ви можете налаштувати різні фільтри для
обробки запитів, наприклад, для перехоплення і обробки запитів
аутентифікації або авторизації.
 Інтеграція з іншими фреймворками: Spring Security може бути
легко інтегровано з іншими технологіями та фреймворками, такими як
Spring Framework, Spring Boot, інші стеки технологій.
 Міжнародізація та локалізація: Spring Security підтримує
міжнародізацію та локалізацію, що дозволяє налаштовувати
повідомлення про помилки та інші текстові рядки для різних мов.
Налаштування Spring Security:
 У файлі pom.xml (для Maven) додайте залежності для Spring
Security:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
 Створення конфігураційного классу, який буде перевіряти
доступ до ендпоїнтів (рис. 5.1 – 5.2):
Рисунок 5.1 – Конфігурація сервера для маніпуляції робітниками
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 44
Рисунок 5.2 – Конфігурація сервера для автентифікації користувачів
Ваша серверна частина захищена від дій зловмисника.
Загалом, Spring Security дозволяє забезпечити комплексну та надійну
безпеку вашого додатку, забезпечуючи захист від різних загроз і забезпечуючи
високий рівень довіри користувачів до вашого програмного забезпечення.
5.2 Захищена авторизація з використанням JWT-токенів та
фільтрація вхідних запитів
JWT (JSON Web Token) - це стандарт для створення токенів, який часто
використовується для забезпечення авторизації в веб-додатках. Використання
JWT дозволяє вам зберігати інформацію про користувача в токені, який
передається з клієнта на сервер з кожним запитом [2].
Основні кроки для реалізації захищеної авторизації з використанням
JWT:
 Створення токена при аутентифікації користувача:
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 45
 Коли користувач успішно аутентифікується, сервер створює
JWT-токен, який містить інформацію про користувача (наприклад, ім'я
користувача, ролі).
 Токен підписується секретним ключем, щоб запобігти його
підробці.
Передача токена з клієнта на сервер:
 Клієнт зберігає отриманий токен (наприклад, в LocalStorage або
Cookies).
 При кожному запиті клієнт відправляє токен у заголовку
Authorization.
Фільтрація вхідних запитів:
 Сервер перевіряє наявність токена в заголовку Authorization.
 Якщо токен валідний, сервер дозволяє доступ до запитаного
ресурсу; в іншому випадку - відмовляє в доступі.
Загалом, використання JWT-токенної авторизації дозволяє покращити
безпеку вашої системи шляхом забезпечення захисту даних, масштабованості
та відновлюваності сесій, також вона є потужним інструментом для
забезпечення безпеки та автентифікації в розподілених системах і додатках.
Реалізація в розробленій системі:
 Створення сервісу для генерації jwt-токена:
 @Service
public class JwtAuthenticationService {
public static final String SECRET_KEY =
"763979244226452948404D635166546A576E5A7234753778217A25432A462D4A";
public String extractUsername(String token) {
return extractClaim(token, Claims::getSubject);
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 46
}
public <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
final Claims claims = extractAllClaims(token);
return claimsResolver.apply(claims);
}
public String generateToken(UserDetails userDetails) {
return generateToken(new HashMap<>(), userDetails);
}
public String generateToken(Map<String, Object> extractClaims, UserDetails userDetails) {
return Jwts.builder()
.setClaims(extractClaims)
.setSubject(userDetails.getUsername())
.setIssuedAt(new Date(System.currentTimeMillis()))
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 24))
.signWith(getSignKey(), SignatureAlgorithm.HS256)
.compact();
}
public boolean isTokenValid(String token, UserDetails userDetails) {
final String username = extractUsername(token);
return (username.equals(userDetails.getUsername())) && !isTokenExpired(token);
}
public boolean isTokenExpired(String token) {
return extractExpiration(token).before(new Date());
}
public Date extractExpiration(String token) {
return extractClaim(token, Claims::getExpiration);
}
public Claims extractAllClaims(String token) {
return Jwts.parserBuilder()
.setSigningKey(getSignKey())
.build()
.parseClaimsJws(token)
.getBody();
}
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 47
public Key getSignKey() {
byte[] keyBytes = Decoders.BASE64.decode(SECRET_KEY);
return Keys.hmacShaKeyFor(keyBytes);
}
}
 Створення фільтру для перевірки заголовків на наявність
авторизаційного токена:
 @Component
@RequiredArgsConstructor
public class JwtAuthenticationFilter extends OncePerRequestFilter {
private final JwtAuthenticationService jwtService;
private final UserDetailsService userDetailsService;
@Override
protected void doFilterInternal(@NonNull HttpServletRequest request,
@NonNull HttpServletResponse response,
@NonNull FilterChain filterChain) throws ServletException, IOException {
final String authHeader = request.getHeader("Authorization");
final String jwtToken;
final String userEmail;
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
filterChain.doFilter(request, response);
return;
}
jwtToken = authHeader.substring(7);
userEmail = jwtService.extractUsername(jwtToken);
if (userEmail != null && SecurityContextHolder.getContext().getAuthentication() == null) {
UserDetails userDetails = userDetailsService.loadUserByUsername(userEmail);
if (jwtService.isTokenValid(jwtToken, userDetails)) {
UsernamePasswordAuthenticationToken authenticationToken = new
UsernamePasswordAuthenticationToken(
userDetails,
null,
userDetails.getAuthorities()
);
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 48
}
}
filterChain.doFilter(request, response);
}
}
Створення конфігураційного класу для jwt-авторизації:
 @Configuration
@RequiredArgsConstructor
public class JwtAuthenticationConfig {
private final UserRepository userRepository;
@Bean
public UserDetailsService userDetailsService() {
return username -> userRepository.findByEmail(username)
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
}
@Bean
public AuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
authenticationProvider.setUserDetailsService(userDetailsService());
authenticationProvider.setPasswordEncoder(passwordEncoder());
return authenticationProvider;
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws
Exception {
return configuration.getAuthenticationManager();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Після успішної авторизації або реєстрації буде надано jwt-токен доступу
до додатку (рис. 5.3):
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 49
Рисунок 5.3 – Отриманий токен
Jwt-токенна авторизація була реалізована за допомогою Spring security.
5.3 Реалізація сесійності з встановленням часу життя сесії
Для реалізації сесійності з встановлення часу життя сесії ми
звертаємось до нашого сервісу для створення jwt-токену, всередині міститься
логіка для встановлення життя сесії [2]:
public String generateToken(Map<String, Object> extractClaims, UserDetails userDetails) {
return Jwts.builder()
.setClaims(extractClaims)
.setSubject(userDetails.getUsername())
.setIssuedAt(new Date(System.currentTimeMillis()))
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 24))
.signWith(getSignKey(), SignatureAlgorithm.HS256)
.compact();
}
Встановлюємо життя сесії на 24 години.
Отже, реалізація сесійності є важливим елементом для забезпечення
безпеки та ефективності інформаційних систем, дозволяючи зменшити ризики
втрати даних та забезпечуючи стійкість до атак.
5.4 Сервіс для перевірки сесій та авторизація доступу до закритих
ендпоїнтів
На моєму клієнтському сервері для переходу та доступу до ендпоїнтів
використовується роутер:
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 50
routes: [
{
path: '/',
name: 'home',
component: HomeView
},
{
path: '/login',
name: 'login',
component: LoginView
},
{
path: '/signup',
name: 'signup',
component: SignupView
},
{
path: '/reports',
name: 'reports',
component: ReportsView,
meta: { requiresAuth: true }
},
{
path: '/dashboard',
name: 'dashboard',
component: DashboardView,
meta: { requiresAuth: true }
},
{
path: '/reserved',
name: 'reserved',
component: ReservedView,
meta: { requiresAuth: true }
},
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 51
]
})
router.beforeEach((to, from, next) => {
const localStorageStore = useLocalStorageStore();
const isAuthenticated = localStorageStore.tokenExists;
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!isAuthenticated) {
next("/login");
} else {
next();
}
} else {
if (isAuthenticated && (to.path === "/login" || to.path === "/signup")) {
next("/dashboard");
} else {
next();
}
}
});
export default router
Цей сервіс перевіряє на наявність токену авторизації в куках, якщо він
є в наявності то редіректити юзера на сторінку dashboard, а якщо токена немає
то редіректити на сторінку логіну.
Отже цей сервіс забороняє користувача переміщуватися між
захищеними ендпоїнтами якщо він не авторизований.
5.5 Хешування паролів
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 52
Хешування bcrypt - це алгоритм хешування, який використовується для
захисту паролів та іншої конфіденційної інформації [12]. Ось деякі
особливості та переваги хешування bcrypt:
 Сповільнення обчислень: Bcrypt використовує обчислювально
інтенсивні функції, що робить його більш витратним для атак,
спрямованих на визначення початкового пароля.
 Солі: Bcrypt автоматично генерує та використовує унікальну
сіль для кожного хешу, що ускладнює атаки перебором або пошуком по
словнику.
 Робить атаки з використанням готових таблиць менш
ефективними: Функції, використовувані в bcrypt, роблять атаки з
використанням готових таблиць, таких як rainbow tables, менш
ефективними, оскільки потрібно велику кількість обчислень для
генерації хешів.
 Автоматична підтримка розміру хешу: Bcrypt автоматично
підтримує збільшення розміру хешу з часом, що дозволяє протистояти
зростаючій обчислювальній потужності атакувачів (рис. 5.4).
Рисунок 5.4 – Хешовані паролі
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 53
Загалом, використання bcrypt для хешування паролів та іншої
конфіденційної інформації є ефективним способом забезпечення безпеки
даних та захисту від атак.
5.6 Docker контейнеризація мікросервісів та ізольованість бази
даних
Основні переваги Docker контейнеризації для мікросервісів [20, 21]:
 Ізоляція мікросервісів: Кожен мікросервіс працює в окремому
контейнері, що забезпечує його ізольованість від інших мікросервісів.
Це дозволяє уникнути конфліктів між різними версіями залежностей та
забезпечує безпеку та надійність роботи.
 Портативність: Контейнери Docker працюють однаково на будь-
якому середовищі, що підтримує Docker, що спрощує розгортання
додатків на різних платформах (наприклад, на локальному комп'ютері
розробника, у тестовому середовищі або на продакшн-сервері).
 Легке масштабування: Docker дозволяє легко масштабувати
мікросервіси, створюючи додаткові контейнери для обробки
збільшеного навантаження.
 Швидке розгортання та відновлення: Контейнери можуть бути
швидко створені, зупинені або перезапущені, що дозволяє ефективно
керувати оновленнями та відновленням додатків.
Ізольованість бази даних:
 Контейнеризація також забезпечує ізольованість бази даних.
База даних може працювати в окремому контейнері, що дозволяє:
 Захист даних: Дані в базі даних ізольовані від інших сервісів і
додатків, що забезпечує їх безпеку.
 Спрощене керування версіями: Легко змінювати версію бази
даних або оновлювати її конфігурацію, створюючи новий контейнер з
потрібною версією або налаштуваннями.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 54
 Резервне копіювання та відновлення: Можливість швидкого
створення резервних копій контейнерів з базою даних і відновлення з
них у разі необхідності.
Docker контейнеризація забезпечує ізольованість мікросервісів та баз
даних, спрощуючи розгортання, масштабування та керування додатками.
Використання Docker дозволяє створювати надійні та безпечні середовища
для виконання ваших додатків, забезпечуючи високу портативність та
гнучкість.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 55
ВИСНОВКИ
У сучасних умовах цифрової трансформації підприємств та організацій,
забезпечення безпеки інформаційних систем є критично важливим завданням.
Розроблена захищена інформаційна система бухгалтерського обліку
персоналу забезпечує ефективне управління даними співробітників,
мінімізуючи ризики несанкціонованого доступу та втрати даних.
Розроблений функціонал системи:
1. Управління даними співробітників:
 Реєстрація та аутентифікація користувачів.
 Зберігання та обробка персональної інформації (ім'я, прізвище,
електронна пошта, номер телефону, вік, тощо).
 Управління ролями та правами доступу.
2. Забезпечення безпеки даних:
 Використання сучасних протоколів шифрування для передачі
даних між сервісами.
 Захист конфіденційної інформації за допомогою токенів
безпеки, таких як JWT.
 Фільтрація та контроль доступу до ресурсів системи з
використанням Spring Security.
3. Ефективне управління базами даних:
 Використання реляційних баз даних, таких як PostgreSQL, для
надійного зберігання та маніпулювання даними.
 Інтеграція з Hibernate для зручного доступу до даних та їх
обробки.
4. Масштабованість та продуктивність:
 Мікросервісна архітектура забезпечує гнучкість та можливість
швидкого розширення функціоналу системи.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 56
 Використання фреймворків Spring та Vue.js дозволяє
створювати продуктивні та масштабовані додатки, що задовольняють
вимоги користувачів.
5. Зручність та інтуїтивність інтерфейсу:
 Створення користувацького інтерфейсу з використанням Vue.js
та бібліотеки компонентів Element-UI Plus забезпечує зручність роботи
користувачів з системою.
 Інтуїтивний UX/UI дизайн дозволяє швидко навчитися та
ефективно використовувати функціонал системи.
6. Модернізація та оновлення:
 Легкість оновлення компонентів системи завдяки
контейнеризації та мікросервісній архітектурі.
 Використання CI/CD процесів для автоматизації розгортання та
оновлення системи.
7. Перегляд часу робітників:
 Реалізація функціоналу для обліку робочого часу
співробітників, що дозволяє зберігати інформацію про робочі зміни, час
початку та закінчення роботи.
 Відображення розкладу роботи співробітників для керівників та
самих співробітників, що сприяє підвищенню прозорості та
ефективності управління персоналом.
Ключові аспекти захищеної інформаційної системи
Безпека даних:
 Використання сучасних протоколів шифрування для передачі
даних між сервісами.
 Захист конфіденційної інформації за допомогою токенів
безпеки, таких як JWT.
 Фільтрація та контроль доступу до ресурсів системи з
використанням Spring Security.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 57
Ізольованість компонентів:
 Контейнеризація мікросервісів та бази даних за допомогою
Docker забезпечує їх ізольованість та легкість керування.
 Використання технологій, таких як Kubernetes, для
автоматичного масштабування та оркестрації контейнерів.
Ефективне управління базами даних:
 Використання реляційних баз даних, таких як PostgreSQL, для
надійного зберігання та маніпулювання даними.
 Інтеграція з Hibernate для зручного доступу до даних та їх
обробки.
Масштабованість та продуктивність:
 Мікросервісна архітектура забезпечує гнучкість та можливість
швидкого розширення функціоналу системи.
 Використання фреймворків Spring та Vue.js дозволяє
створювати продуктивні та масштабовані додатки, що задовольняють
вимоги користувачів.
Зручність та інтуїтивність інтерфейсу:
 Створення користувацького інтерфейсу з використанням Vue.js
та бібліотеки компонентів Element-UI Plus забезпечує зручність роботи
користувачів з системою.
 Інтуїтивний UX/UI дизайн дозволяє швидко навчитися та
ефективно використовувати функціонал системи.
Модернізація та оновлення:
 Легкість оновлення компонентів системи завдяки
контейнеризації та мікросервісній архітектурі.
 Використання CI/CD процесів для автоматизації розгортання та
оновлення системи.
У підсумку, захищена інформаційна система бухгалтерського обліку
персоналу не лише забезпечує надійність та безпеку даних, але й сприяє
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 58
підвищенню ефективності управління персоналом. Використання сучасних
технологій та підходів дозволяє створювати гнучкі, масштабовані та
продуктивні рішення, що відповідають вимогам бізнесу та забезпечують
високий рівень задоволення користувачів.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 59
ДОДАТОК А
«ЗАТВЕРДЖУЮ»
Завідувач кафедри ІБ та КІ
д.т.н., професор Віра БАБЕНКО
__________________
«___» ____________ 2024 року
Захищена інформаційна система бухгалтерського обліку
персоналу
Специфікація
482.ЧДТУ.42238-01
Листів 2
Розробник _______________ Денис АПІЛАТ
Керівник _______________ Артем ЛАВДАНСЬКИЙ
Черкаси 2024
2
482.ЧДТУ.42238-01
Позначення Найменування Примітка
Документація
482.ЧДТУ.42238-01 12 01 Текст програми
482.ЧДТУ.42238-01 34 01 Інструкція користувача
ДОДАТОК Б
Захищена інформаційна система бухгалтерського обліку
персоналу
Текст програми
482.ЧДТУ.42238-01 12 01
Листів 16
Розробник: Денис АПІЛАТ
Черкаси 2024
2
482.ЧДТУ.42238-01 12 01
СЕРВІС АВТОРИЗАЦІЇ КОРИСТУВАЧІВ
Приклад коду моделі даних UserEntity
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "users")
public class UserEntity implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
private String email;
private String accountUsername;
private String phoneNumber;
private String firstName;
private String lastName;
private Integer age;
private String password;
@Enumerated(EnumType.STRING)
private UserRole role;
private String ipAddress;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return List.of(new SimpleGrantedAuthority(role.name()));
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUsername() {
return email;
}
3
482.ЧДТУ.42238-01 12 01
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
Приклад коду сервіса AuthenticationService
@Service
@Slf4j
@RequiredArgsConstructor
public class AuthenticationService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final JwtAuthenticationService jwtService;
private final AuthenticationManager authenticationManager;
private final IpAddressProvider ipAddressProvider;
public JwtResponseDTO register(RegisterRequestDTO request) {
if (userRepository.findByEmail(request.getEmail()).isEmpty()) {
UserEntity userEntity = UserEntity.builder()
.email(request.getEmail())
.accountUsername(request.getAccountUsername())
4
482.ЧДТУ.42238-01 12 01
.phoneNumber(request.getPhoneNumber())
.firstName(request.getFirstName())
.lastName(request.getLastName())
.age(request.getAge())
.password(passwordEncoder.encode(request.getPassword()))
.role(UserRole.USER)
.ipAddress(ipAddressProvider.getIpAddress())
.build();
userRepository.save(userEntity);
String jwtToken = jwtService.generateToken(userEntity);
log.info("Registration {}", userEntity);
return JwtResponseDTO.builder()
.token(jwtToken)
.build();
}
log.info("Registration failed, user exist!");
return JwtResponseDTO.builder()
.token(null)
.build();
}
public JwtResponseDTO login(LoginRequestDTO request) {
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(request.getEmail(), request.getPassword())
);
UserEntity userEntity = userRepository.findByEmail(request.getEmail())
.orElseThrow();
String jwtToken = jwtService.generateToken(userEntity);
log.info("Login {}", userEntity);
return JwtResponseDTO.builder()
.token(jwtToken)
.build();
}
public ProfileResponseDTO profile() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
UserEntity userEntity = userRepository.findByEmail(authentication.getName()).orElseThrow(
() -> new UsernameNotFoundException("User not found")
);
log.info("Profile {}", userEntity);
5
482.ЧДТУ.42238-01 12 01
return ProfileResponseDTO.builder()
.id(userEntity.getId())
.firstName(userEntity.getFirstName())
.lastName(userEntity.getLastName())
.age(userEntity.getAge())
.role(userEntity.getRole())
.build();
}
}
Приклад коду Контроллера AuthenticationController
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/auth")
public class AuthenticationController {
private final AuthenticationService authenticationService;
@PostMapping("/register")
public ResponseEntity<JwtResponseDTO> registration(@RequestBody RegisterRequestDTO requestModel) {
return ResponseEntity.ok(authenticationService.register(requestModel));
}
@PostMapping("/login")
public ResponseEntity<JwtResponseDTO> login(@RequestBody LoginRequestDTO requestModel) {
return ResponseEntity.ok(authenticationService.login(requestModel));
}
@GetMapping("/profile")
public ResponseEntity<ProfileResponseDTO> profile() {
return ResponseEntity.ok(authenticationService.profile());
}
}
6
482.ЧДТУ.42238-01 12 01
СЕРВІС УПРАВЛІННЯ РОБІТНИКАМИ
Приклад коду сутності EmployeeEntity
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "employees")
public class EmployeeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
private String email;
private String phoneNumber;
private String firstName;
private String lastName;
private Integer age;
private Integer salaryPerHour;
private Integer hoursPerMonth;
private Integer experience;
@Enumerated(EnumType.STRING)
private EmployeeRoleEnum role;
@OneToOne
@JoinColumn(name = "location")
private EmployeeLocationEntity location;
}
Приклад коду сервіса EmployeeService
@Service
@RequiredArgsConstructor
public class EmployeeService {
private final EmployeeRepository employeeRepository;
private final EmployeeLocationRepository employeeLocationRepository;
private final EmployeeWorkScheduleRepository employeeWorkScheduleRepository;
private final EmployeeReservedRepository employeeReservedRepository;
7
482.ЧДТУ.42238-01 12 01
private final EmployeeReservedLocationRepository employeeReservedLocationRepository;
private final EmployeeReservedWorkScheduleRepository employeeReservedWorkScheduleRepository;
public List<EmployeeEntity> addEmployees(List<EmployeeRequestDTO> employeeDTOs) {
List<EmployeeEntity> employees = employeeDTOs.stream()
.map(this::mapDTOToEntity)
.collect(Collectors.toList());
return employeeRepository.saveAll(employees);
}
public EmployeeEntity addEmployee(EmployeeRequestDTO employeeDTO) {
EmployeeEntity employee = mapDTOToEntity(employeeDTO);
return employeeRepository.save(employee);
}
public List<EmployeeEntity> getEmployees() {
Sort sort = Sort.by(Sort.Direction.ASC, "email");
return employeeRepository.findAll(sort);
}
public List<EmployeeEntity> getEmployeesSortedByExperience() {
Sort sort = Sort.by(Sort.Direction.DESC, "experience");
return employeeRepository.findAll(sort);
}
public List<EmployeeEntity> getEmployeesSortedByAge() {
Sort sort = Sort.by(Sort.Direction.DESC, "age");
return employeeRepository.findAll(sort);
}
@Transactional(readOnly = true)
public Page<EmployeeEntity> getPagesEmployees(PaginationDTO paginationDTO) {
Pageable pageable = PageRequest.of(paginationDTO.getPageNumber(), paginationDTO.getPageSize());
return employeeRepository.findAll(pageable);
}
public void deleteEmployee(String id) {
EmployeeEntity employeeEntity = employeeRepository.findById(id).orElseThrow();
EmployeeLocationEntity employeeLocationEntity = employeeEntity.getLocation();
List<EmployeeWorkScheduleEntity> employeeWorkScheduleEntity =
8
482.ЧДТУ.42238-01 12 01
employeeWorkScheduleRepository.findAllByEmployeeId(id);
EmployeeReservedLocationEntity employeeReservedLocationEntity =
EmployeeReservedLocationEntity.builder()
.street(employeeLocationEntity.getStreet())
.city(employeeLocationEntity.getCity())
.state(employeeLocationEntity.getState())
.country(employeeLocationEntity.getCountry())
.zip(employeeLocationEntity.getZip())
.build();
employeeReservedLocationRepository.save(employeeReservedLocationEntity);
EmployeeReservedEntity employeeReservedEntity = EmployeeReservedEntity
.builder()
.email(employeeEntity.getEmail())
.phoneNumber(employeeEntity.getPhoneNumber())
.firstName(employeeEntity.getFirstName())
.lastName(employeeEntity.getLastName())
.age(employeeEntity.getAge())
.salaryPerHour(employeeEntity.getSalaryPerHour())
.hoursPerMonth(employeeEntity.getHoursPerMonth())
.experience(employeeEntity.getExperience())
.role(employeeEntity.getRole())
.location(employeeReservedLocationEntity)
.build();
employeeReservedRepository.save(employeeReservedEntity);
List<EmployeeReservedWorkScheduleEntity> reservedWorkSchedules = new ArrayList<>();
for (EmployeeWorkScheduleEntity entity : employeeWorkScheduleEntity) {
EmployeeReservedWorkScheduleEntity employeeReservedWorkScheduleEntity =
EmployeeReservedWorkScheduleEntity.builder()
.employee(employeeReservedEntity)
.startTime(entity.getStartTime())
.endTime(entity.getEndTime())
.build();
reservedWorkSchedules.add(employeeReservedWorkScheduleEntity);
}
employeeReservedWorkScheduleRepository.saveAll(reservedWorkSchedules);
9
482.ЧДТУ.42238-01 12 01
employeeWorkScheduleRepository.deleteAll(employeeWorkScheduleEntity);
employeeRepository.deleteById(employeeEntity.getId());
employeeLocationRepository.deleteById(employeeLocationEntity.getId());
}
public void updateEmployee(String employeeId, EmployeeRequestDTO employeeDTO) {
EmployeeEntity employeeEntity = employeeRepository.findById(employeeId).orElseThrow();
employeeEntity.setEmail(employeeDTO.getEmail());
employeeEntity.setPhoneNumber(employeeDTO.getPhoneNumber());
employeeEntity.setFirstName(employeeDTO.getFirstName());
employeeEntity.setLastName(employeeDTO.getLastName());
employeeEntity.setAge(employeeDTO.getAge());
employeeEntity.setSalaryPerHour(employeeDTO.getSalaryPerHour());
employeeEntity.setHoursPerMonth(employeeDTO.getHoursPerMonth());
employeeEntity.setExperience(employeeDTO.getExperience());
employeeEntity.setRole(employeeDTO.getRole());
employeeRepository.save(employeeEntity);
}
public void updateEmployeeLocation(String locationId, EmployeeLocationRequestDTO employeeDTO) {
EmployeeLocationEntity location = employeeLocationRepository.getReferenceById(locationId);
location.setStreet(employeeDTO.getStreet());
location.setCity(employeeDTO.getCity());
location.setState(employeeDTO.getState());
location.setCountry(employeeDTO.getCountry());
location.setZip(employeeDTO.getZip());
employeeLocationRepository.save(location);
}
private EmployeeEntity mapDTOToEntity(EmployeeRequestDTO employeeDTO) {
EmployeeLocationEntity location = mapLocationDTOToEntity(employeeDTO.getLocation());
employeeLocationRepository.save(location);
return EmployeeEntity.builder()
.email(employeeDTO.getEmail())
.phoneNumber(employeeDTO.getPhoneNumber())
.firstName(employeeDTO.getFirstName())
10
482.ЧДТУ.42238-01 12 01
.lastName(employeeDTO.getLastName())
.age(employeeDTO.getAge())
.salaryPerHour(employeeDTO.getSalaryPerHour())
.hoursPerMonth(employeeDTO.getHoursPerMonth())
.experience(employeeDTO.getExperience())
.role(employeeDTO.getRole())
.location(location)
.build();
}
private EmployeeLocationEntity mapLocationDTOToEntity(EmployeeLocationRequestDTO locationDTO) {
return EmployeeLocationEntity.builder()
.street(locationDTO.getStreet())
.city(locationDTO.getCity())
.state(locationDTO.getState())
.country(locationDTO.getCountry())
.zip(locationDTO.getZip())
.build();
}
}
Приклад коду контроллера EmployeeController
@RestController
@RequestMapping("/api/v1/employees")
@RequiredArgsConstructor
public class EmployeeController {
private final EmployeeService employeeService;
@GetMapping("/getEmployees")
public ResponseEntity<Page<EmployeeEntity>> getEmployees(@RequestParam Integer pageNumber,
@RequestParam Integer pageSize) {
PaginationDTO paginationDTO = PaginationDTO.builder()
.pageNumber(pageNumber)
.pageSize(pageSize)
.build();
Page<EmployeeEntity> employeesPage = employeeService.getPagesEmployees(paginationDTO);
return ResponseEntity.ok(employeesPage);
}
11
482.ЧДТУ.42238-01 12 01
@PostMapping("/addEmployees")
public ResponseEntity<List<EmployeeEntity>> addEmployees(@RequestBody List<EmployeeRequestDTO>
employees) {
return ResponseEntity.of(Optional.ofNullable(employeeService.addEmployees(employees)));
}
@PostMapping("/addEmployee")
public ResponseEntity<EmployeeEntity> addEmployees(@RequestBody EmployeeRequestDTO employees) {
return ResponseEntity.ok(employeeService.addEmployee(employees));
}
@DeleteMapping("/deleteEmployee/{id}")
public ResponseEntity<String> deleteEmployee(@PathVariable String id) {
employeeService.deleteEmployee(id);
return ResponseEntity.ok("Employee has been deleted!");
}
@PutMapping("/updateEmployee/{id}")
public ResponseEntity<EmployeeRequestDTO> updateEmployee(@PathVariable String id, @RequestBody
EmployeeRequestDTO employeeDTO) {
employeeService.updateEmployee(id, employeeDTO);
return ResponseEntity.ok(employeeDTO);
}
@PutMapping("/updateEmployeeLocation/{id}")
public ResponseEntity<EmployeeLocationRequestDTO> updateEmployeeLocation(@PathVariable String id,
@RequestBody EmployeeLocationRequestDTO employeeLocationDTO) {
employeeService.updateEmployeeLocation(id, employeeLocationDTO);
return ResponseEntity.ok(employeeLocationDTO);
}
}
12
482.ЧДТУ.42238-01 12 01
КЛІЄНТСЬКА ЧАСТИНА ОБЛІКУ ПЕРСОНАЛУ
Приклад коду axios сервіса для автентифікації користувачів:
import axios from 'axios';
import router from "@/router/index.js";
import { useLocalStorageStore } from '../store/localSorage.js';
const API_AUTH_URL = 'http://localhost:9000/api/v1/auth'
const authService = {
async login(loginRequestData) {
const localStorageStore = useLocalStorageStore();
try {
const { email, password } = loginRequestData;
const { data } = await axios.post(API_AUTH_URL + "/login", {
email: email,
password: password
});
await localStorageStore.setToken(data.token);
await router.push('/dashboard');
return data.token;
} catch (error) {
console.error("Error receiving token:", error);
throw error;
}
},
async signup(signupRequestData) {
const localStorageStore = useLocalStorageStore();
try {
const { email, accountUsername, phoneNumber, firstName, lastName, age, password } =
13
482.ЧДТУ.42238-01 12 01
signupRequestData;
const { data } = await axios.post(API_AUTH_URL + '/register', {
email: email,
accountUsername: accountUsername,
phoneNumber: phoneNumber,
firstName: firstName,
lastName: lastName,
age: age,
password: password
});
await localStorageStore.setToken(data.token);
await router.push('/dashboard');
return data.token;
} catch (error) {
console.error("Error receiving token:", error);
throw error;
}
}
};
export default authService;
Приклад коду axios сервіса для маніпуляції робітниками
import axios from 'axios';
const API_EMPLOYEES_URL = 'http://localhost:9100/api/v1/employees'
const employeeService = {
async allPaginationEmployees(pageNumber, pageSize) {
try {
const { data } = await
14
482.ЧДТУ.42238-01 12 01
axios.get(`${API_EMPLOYEES_URL}/getEmployees?pageNumber=${pageNumber}&pageSiz
e=${pageSize}`);
console.log("data", data);
return data;
} catch (error) {
console.error("Error receiving employees:", error);
throw error;
}
},
async addEmployee(updatedData) {
try {
const { id, email, phoneNumber, firstName, lastName, age, salaryPerHour, hoursPerMonth,
experience, role, location } = updatedData;
await axios.post(`${API_EMPLOYEES_URL}/addEmployee`, {
email: email,
phoneNumber: phoneNumber,
firstName: firstName,
lastName: lastName,
age: age,
salaryPerHour: salaryPerHour,
hoursPerMonth: hoursPerMonth,
experience: experience,
role: role,
location: location,
});
console.log('User has been updated! ', updatedData);
} catch (error) {
console.error('Error updating employee:', error);
throw error;
}
},
15
482.ЧДТУ.42238-01 12 01
async deleteEmployee(id) {
try {
await axios.delete(`${API_EMPLOYEES_URL}/deleteEmployee/${id}`);
console.log('Employee has been deleted!');
} catch (error) {
console.error('Error deleting employee:', error);
throw error;
}
},
async updateEmployee(updatedData) {
try {
const { id, email, phoneNumber, firstName, lastName, age, salaryPerHour, hoursPerMonth,
experience, role, location } = updatedData;
await axios.put(`${API_EMPLOYEES_URL}/updateEmployee/${id}`, {
email: email,
phoneNumber: phoneNumber,
firstName: firstName,
lastName: lastName,
age: age,
salaryPerHour: salaryPerHour,
hoursPerMonth: hoursPerMonth,
experience: experience,
role: role,
location: location,
});
console.log('User has been updated! ', updatedData);
} catch (error) {
console.error('Error updating employee:', error);
throw error;
}
},
16
482.ЧДТУ.42238-01 12 01
async updateEmployeeLocation(updatedData) {
try {
const { id, street, city, state, country, zip } = updatedData;
await axios.put(`${API_EMPLOYEES_URL}/updateEmployeeLocation/${id}`, {
street: street,
city: city,
state: state,
country: country,
zip: zip
});
console.log('User Location has been updated!', updatedData);
} catch (error) {
console.error('Error updating employee location:', error);
throw error;
}
},
};
export default employeeService;
ДОДАТОК В
Захищена інформаційна система бухгалтерського обліку
персоналу
Інструкція користувача
482.ЧДТУ.42238-01 34 01
Листів 9
Розробник: Денис АПІЛАТ
Черкаси 2024
2
482.ЧДТУ.42238-01 34 01
Для початку роботи з персоналом вам потрібно перейти на головну
сторінку сайту (рис. В.1).
Рисунок В.1 – Головна сторінка системи
Для подальшої роботи з робітниками нам потрібно Зареєструвати або
авторизуватися в системі (рисунки В.2 – В.3).
Рисунок В.2 – Сторінка авторизації
3
482.ЧДТУ.42238-01 34 01
Рисунок В.3 – Сторінка реєстрації
При успішній авторизації або реєстрації, ми перейдемо на сторінку з
робітниками (рисунок В.4).
Рисунок В.4 – Панель огляду робітників
Для того щоб маніпулювати з робітником ми можемо використовувати
кнопки видалення, та редагування (рисунок В.5).
4
482.ЧДТУ.42238-01 34 01
Рисунок В.5 – Кнопки маніпулювання робітниками
Для редагування окремого запису потрібно на сторінці огляду записів
ресурсу натиснути на кнопку Edit, після чого відкриється вікно редагування
цього робітника (рисунок В.6).
Рисунок В.6 – Вікно редагування окремого робітника
Після натискання на кнопку Work Schedule нам відкриються робочі дні
робітника (рисунок В.7).
5
482.ЧДТУ.42238-01 34 01
Рисунок В.7 – Робочі дні та години робітника
Щоб додати робітника ми можем використати кнопку додавання
(рисунок В.8).
Рисунок В.8 – Кнопка додавання нового робітника
Щоб записати нового робітника в базу, потрібно заповнити форму
даними (рисунок В.9).
6
482.ЧДТУ.42238-01 34 01
Рисунок В.9 – Форма додавання нового робітника
Також можливий пошук конкретного робітника по всій базі даних
робітників (рис. В.10).
Рисунок В.10 – Форма пошуку робітників
Якщо перейти на сторінку Reports тут будуть доступні pdf-звіти для
скачування (рис. В.11).
7
482.ЧДТУ.42238-01 34 01
Рисунок В.11 – Сторінка доступних бухгалтерських звітів
Після натискати на будь-який звіт почнеться скачування звіту
конкретного типу (рис. В.12).
Рисунок В.12 – Завантажений файл на ваш комп’ютер
Після завантаження звіту він буде доступний для перегляду (рис. В.13).
8
482.ЧДТУ.42238-01 34 01
Рисунок В.13 – Завантажений pdf-звіт по формування місячних зарплат
Якщо перейти на сторінку Reserved тут будуть доступні всі робітники
які були звільнені, скорочені і т. і. (рис. В.14).
Рисунок В.14 – Скорочені робітники
Щоб повернути конкретного робітника в штат, ми можемо натиснути на
кнопку повернення. (рис. В.15).
9
482.ЧДТУ.42238-01 34 01
Рисунок В.15 – Кнопка повернення робітника в штат
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Офіційний сайт розробника Java(Oracle) [Електронний ресурс]. —
Режим доступу: https://www.oracle.com/cis/java/ (дата звернення: 01.04.2024).
— Назва з екрана.
2. Офіційний сайт JWT [Електронний ресурс]. — Режим доступу:
https://jwt.io (дата звернення: 01.04.2024). — Назва з екрана.
3. Офіційний сайт Maven Repository, для встановлення залежностей
[Електронний ресурс]. — Режим доступу: https://mvnrepository.com (дата
звернення: 01.04.2024). — Назва з екрана.
4. Офіційний сайт Jasper для створення звітів [Електронний ресурс].
— Режим доступу: https://www.jaspersoft.com (дата звернення: 01.04.2024). —
Назва з екрана.
5. Офіційний сайт Flyway для створення міграцій [Електронний
ресурс]. — Режим доступу: https://flywaydb.org (дата звернення: 01.04.2024).
— Назва з екрана.
6. Офіційна документація по правильному написанню коду на Java
[Електронний ресурс]. — Режим доступу:
https://www.oracle.com/technetwork/java/codeconventions-150003.pdf (дата
звернення: 01.04.2024). — Назва з екрана.
7. Посібник розробника для JS [Електронний ресурс]. — Режим
доступу: https://developer.mozilla.org/ru/docs/Web/JavaScript (дата звернення:
01.04.2024). — Назва з екрана.
8. Офіційний сайт Spring Framework [Електронний ресурс]. — Режим
доступу: https://spring.io/projects/spring-framework (дата звернення:
01.04.2024). — Назва з екрана.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 87
9. Офіційний сайт Spring Boot [Електронний ресурс]. — Режим
доступу: https://spring.io/projects/spring-boot (дата звернення: 01.04.2024). —
Назва з екрана.
10. Офіційний сайт Spring Logging [Електронний ресурс]. — Режим
доступу: https://docs.spring.io/spring-boot/how-to/logging.html (дата звернення:
01.04.2024). — Назва з екрана.
11. Офіційний сайт Project Lombok [Електронний ресурс]. — Режим
доступу: https://www.baeldung.com/intro-to-project-lombok (дата звернення:
01.04.2024). — Назва з екрана.
12. Офіційний сайт Spring Security [Електронний ресурс]. — Режим
доступу: https://spring.io/projects/spring-security (дата звернення: 01.04.2024).
— Назва з екрана.
13. Офіційний сайт Spring Annotations [Електронний ресурс]. —
Режим доступу: https://docs.spring.io/spring-
framework/reference/testing/annotations.html (дата звернення: 01.04.2024). —
Назва з екрана.
14. Офіційний сайт Spring Data JPA [Електронний ресурс]. — Режим
доступу: https://spring.io/projects/spring-data-jpa (дата звернення: 01.04.2024).
— Назва з екрана.
15. Офіційний сайт Spring Test [Електронний ресурс]. — Режим
доступу: https://spring.io/guides/gs/testing-web (дата звернення: 01.04.2024). —
Назва з екрана.
16. Офіційний сайт Hibernate [Електронний ресурс]. — Режим
доступу: https://hibernate.org (дата звернення: 01.04.2024). — Назва з екрана.
17. Офіційний сайт Vue.js [Електронний ресурс]. — Режим доступу:
https://vuejs.org (дата звернення: 01.04.2024). — Назва з екрана.
18. Офіційний сайт Axios [Електронний ресурс]. — Режим доступу:
https://axios-http.com/ru/docs/intro (дата звернення: 01.04.2024). — Назва з
екрана.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 88
19. Офіційний сайт PostgreSQL [Електронний ресурс]. — Режим
доступу: https://www.postgresql.org (дата звернення: 01.04.2024). — Назва з
екрана.
20. Офіційний сайт Docker [Електронний ресурс]. — Режим доступу:
https://www.docker.com (дата звернення: 01.04.2024). — Назва з екрана.
21. Офіційний сайт Docker Hub [Електронний ресурс]. — Режим
доступу: https://hub.docker.com/ (дата звернення: 01.04.2024). — Назва з
екрана.
Лист
ЧДТУ.242238.001 ПЗ т
Зм. Лист № докум. Підпис Дата 89