Báo cáo phân tích về phần mềm quản lý nhân sự

Chương 1: Giới thiệu dự án phần mềm

 

1.1 Khảo sát hiện trạng

 

Quản lý nhân sự là một chức năng quan trọng trong các tổ chức hiện đại , với các nhiệm vụ bao gồm quản lý dữ liệu nhân sự, đánh giá hiệu quả làm việc, và quản lý phúc lợi cho nhân viên,….

Tuy nhiên, trong bối cảnh doanh nghiệp ngày càng phát triển, khối lượng công việc và dữ liệu nhân sự ngày càng lớn, các cơ quan, doanh nghiệp đang gặp phải nhiều thách thức trong việc quản lý hiệu quả và chính xác.

Hiện nay vẫn có nhiều doanh nghiệp hoặc các cơ quan, tổ chức vẫn sử dụng bằng phương pháp thủ công. Nhưng điều này sẽ dẫn đến 1 số vấn đề :

    –  Thông tin phân tán và kém hiệu quả : Các thông tin nhân sự thường bị lưu trữ ở nhiều nơi và dưới nhiều dạng khác nhau, gây khó khăn trong việc tổng hợp và truy cập dữ liệu một cách nhanh chóng, chính xác.

    –  Khó khan trong theo giõi và đánh giá hiệu quả làm việc: Việc theo dõi hiệu suất làm việc của nhân viên thường gặp khó khăn do thiếu công cụ hỗ trợ, dẫn đến các đánh giá chủ quan và thiếu căn cứ. Điều này ảnh hưởng đến việc ra quyết định về đào tạo, khen thưởng và điều chỉnh nhân sự.

    –  Tốn nhiều thời gian cho các quy trình thủ công: Các công việc nhân sự lặp đi lặp lại như tính lương, quản lý nghỉ phép, và quản lý chấm công thường được thực hiện thủ công, dẫn đến tiêu tốn thời gian và dễ xảy ra sai sót.

    –  Thiếu sự nhất quán: Không có hệ thống tự động hóa và chuẩn hóa quy trình có thể dẫn đến những khác biệt trong quy trình nhân sự, gây khó khăn trong việc xây dựng báo cáo và phân tích dữ liệu nhân sự chính xác.

 

1.2 Xác định bài toán cần giải quyết

 

Từ các vấn đề trên, bài toán cần giải quyết là xây dựng một phần mềm quản lý nhân sự tập trung, có khả năng:

  • Tích hợp và lưu trữ dữ liệu nhân viên trên một nền tảng duy nhất, dễ dàng truy cập và bảo trì.
  • Tự động hóa các quy trình như chấm công, tính lương, quản lý nghỉ phép, giúp giảm thiểu sai sót và tiết kiệm thời gian.
  • Tạo ra các công cụ để phân tích hiệu quả làm việc, hỗ trợ nhà quản lý ra quyết định dựa trên dữ liệu chính xác, khách quan.
  • Dễ sử dụng và tùy chỉnh để phù hợp với quy trình và quy mô của từng doanh nghiệp.

Việc giải quyết bài toán này sẽ giúp doanh nghiệp quản lý nhân sự một cách hiệu quả hơn, giảm thiểu các sai sót và thời gian xử lý thủ công, đồng thời tăng cường khả năng ra quyết định dựa trên dữ liệu và cải thiện sự hài lòng của nhân viên.

 

 

1.3 Phân tích yêu cầu

 

1.3.1 Yêu cầu chức năng

 

Quản lý hồ sơ nhân viên

    + Thêm nhân viên

    + Cập nhật thông tin nhân viên

    + Cho nhân viên nghỉ việc

    + Tìm kiếm nhân viên

Quản lý phòng ban

    + Thêm mới phòng ban

    + Cập nhật thông tin phòng ban

    + Xóa phòng ban

    + Tìm kiếm phòng ban

Quản lý bảng lương của mỗi nhân viên

    + Thêm bảng lương cho nhân viên

    + Cập nhật thông tin cho bảng lương của nhân viên

Quản lý chấm công

    + Thêm thông tin để quản lý chấm công của mỗi ngày

(như thời gian làm việc, giờ vào ra, … của nhân viên.)

Thống kê tiền lương của nhân viên

    + Xem thống kê về những thông tin về tiền lương của các nhân viên

Thống kê bảng chấm công của nhân viên

    + Xem thống kê về  phần chấm công của nhân viên để đánh giá hiệu suất làm việc của mỗi nhân viên

 

 

1.3.2 Yêu cầu phi chức năng

 

Hiệu Suất: Hệ thống phải có khả năng xử lý và phản hồi nhanh với dữ liệu lên tới 100 triệu bản ghi

Khả năng mở rộng : Phần mềm phải được thiết kế linh hoạt để có thể mở rộng hoặc tùy chỉnh theo nhu cầu phát triển của doanh nghiệp.

Khả năng tương thích: Hệ thống phải tương thích với các nền tảng phổ biến như Windows, MacOS, và các trình duyệt phổ biến (Chrome, Firefox, Edge).

Khả năng sao lưu và phục hồi dữ liệu: Hệ thống phải có  khả năng phục hồi dữ liệu trong trường hợp xảy ra sự cố và đảm bảo việc sao lưu dữ liệu diễn ra tự động và có thể dễ dàng khôi phục khi cần.

 

Chương 2: Phân tích thiết kế

 

2.1 Thiết kế kiến trúc hệ thống

   

 

Phần mềm sử dụng kiến trúc Client-Server làm mô hình thiết kế.

Nó được chia thành 2 phần là Client và Server

– Client (khách hàng) là phần mềm hoặc thiết bị mà người dùng tương tác trực tiếp ,là giao diện người dùng. Client gửi yêu cầu đến server để thực hiện các tác vụ và nhận kết quả để hiển thị.

 

– Server (máy chủ) là phần mềm hoặc hệ thống có trách nhiệm xử lý yêu cầu từ client, thực hiện các tác vụ cần thiết (như truy xuất dữ liệu, xử lý logic nghiệp vụ) và trả kết quả lại cho client.

Quy trình hoạt động của nó là: người dùng thực hiện tương tác trên Client (ví dụ như click bào buton, điền thông tin vào form, …).Lúc này Client sẽ gửi yêu cầu thông qua phương thức HTTP/HTTPs đến Server. Server sẽ nhận yêu cầu, thực hiện logic nghiệp vụ (có thể tương tác với cơ sở dữ liệu) và sẽ trả lại dữ liệu cho Client. Client sẽ nhận dữ liệu rồi cập nhật lại giao diện cho người dùng

 

 

2.2 Thiết kế cơ sở dữ liệu

 

 

 

Mô tả chi tiết quan hệ của các bảng

 

  • Bảng nhan_viens có quan hệ 1-1 với bảng nhan_vien_CCCDs (trường _id của bảng nhan_viens liên kết với nhan_vien_id trong bảng nhan_vien_CCCDs )
  • Bảng chuc_vu_co_quans có quan hệ 1-1 với bảng nhan_viens (trường nhan_vien_id của bảng chuc_vu_co_quans liên kết với _id của bảng nhan_viens)
  • Bảng chuc_vu_co_quans có quan hệ N-1 với bảng phong_bans (trường ma_phong_ban của bảng chuc_vu_co_quans liên kết với _id của bảng phong_bans)
  • Bảng chuc_vu_co_quans có quan hệ 1-N với bảng cham_congs (trường nhan_vien_id của bảng chuc_vu_co_quans liên kết với nhan_vien_id của bảng cham_congs )
  • Bảng chuc_vu_co_quans có quan hệ 1-1 với bảng bang_luongs (trường nhan_vien_id của bảng chuc_vu_co_quans liên kết với nhan_vien_id của bảng bang_luongs )

 

2.3 Thiết kế giao diện

 

2.3.1 Màn hình đăng nhập

– Khi người dùng đăng nhập vào hệ thống thì hệ thống sẽ kiểm tra username va password xem có đúng không.

– Nếu sai thì sẽ đưa ra thông báo, còn đúng thì sẽ đưa vào màn hình tổng quan của trang web

2.3.2 Màn hình tổng quan

 

          – Màn hình tổng quan sẽ hiển thị 1 số thông tin tổng quan của hệ thống

2.3.3 Màn hình quản lý nhân viên

 

– Khi người dung click vào ảnh “Danh sách nhân viên” hoặc “Quản lý nhân sự ” ở menu bên trái thì sẽ được đưa đến màn hình này

          – Màn hình sẽ hiển thị ra danh sách thông tin các nhân viên

– Chức năng tìm kiếm: có thể tìm kiếm nhân viên theo các thông tin như tên, mã nhân viên, phòng ban,…

-Khi click button “Download excel” thì sẽ download được 1 file excel chứa các thông tin được hiển thị ở bảng trên

– Chức năng xóa nhân viên: khi click vào button “Xóa ” thì nhân viên ấy sẽ bị chuyển sang trạng thái là nghỉ việc và sẽ không được hiển thị ở màn hình

 

2.3.4 Màn hình form thêm mới hoặc cập nhật thông tin nhân viên

 

          – Khi click vào button “thêm mới ”hoặc “cập nhật ” thì form này sẽ được hiển thị ra

          – Người dung sẽ điền các thông tin ở form để thêm mới hoặc cập nhật thông tin của nhân viên

2.3.5 Màn hình quản lý phòng ban

 

  • Khi click vào “Danh sách phòng ban” ở màn hình tổng quan hoặc “Quản lý phòng ban” ở menu bên trái thì sẽ được đưa đến màn hình này
  • Màn hình sẽ hiển thị ra danh sách thông tin các phòng ban
  • Chức năng tìm kiếm: có thể tìm kiếm phòng ban theo thông tin tên phòng ban
  • Chức năng xóa : khi click vào button “Xóa ” thì phòng ban ấy sẽ bị xóa khỏi danh sách

 

 

2.3.6 Màn hình form thêm mới hoặc cập nhật phòng ban

 

          – Khi click vào button “thêm mới ”hoặc “cập nhật ” thì form này sẽ được hiển thị ra

          – Người dung sẽ điền các thông tin ở form để thêm mới hoặc cập nhật thông tin của phòng ban

2.3.7 Màn hình quản lý bảng lương

 

– Khi click “Quản lý bảng lương” ở menu bên trái thì sẽ được đưa đến màn hình này

– Màn hình sẽ hiển thị ra danh sách thông tin bảng lương của các nhân viên

– Chức năng tìm kiếm: có thể tìm kiếm bảng lương nhân viên theo các thông tin như tên, mã nhân viên.

-Khi click button “Download excel” thì sẽ download được 1 file excel chứa các thông tin được hiển thị ở bảng trên

 

 

2.3.8 Màn hình form thêm mới hoặc cập nhật bảng lương của nhân viên

 

          – Khi click vào button “thêm mới ”hoặc “cập nhật ” thì form này sẽ được hiển thị ra

– Người dùng sẽ điền các thông tin ở form để thêm mới hoặc cập nhật thông tin bảng lương của nhân viên

 

2.3.9 Màn hình quản lý chấm công

 

– Khi click “Quản lý bảng lương”của phần “Thống kê” ở menu bên trái thì sẽ được đưa đến màn hình này

– Màn hình sẽ hiển thị danh sách 1 số thông tin chấm công nhân viên của ngày đó

– Người dùng sẽ điền các thông tin như giờ vào, giờ ra, số giờ làm thêm và trạng thái bao gồm (có mặt , nghỉ có phép, nghỉ không phép) của mỗi nhân viên rồi click vào button “Gửi chấm công” để lưu các thông tin đó

-Người dùng cũng có thể tìm kiếm nhân viên theo phòng ban hoặc tất cả nhân viên khi click vào Select

 

2.3.10 Màn hình thống kê chấm công của nhân viên

 

– Khi click “Bảng chấm công” ở menu bên trái thì sẽ được đưa đến màn hình này

– Màn hình sẽ hiển thị ra danh sách thông tin chấm công của nhân viên theo tháng được chọn ở Select

– Chức năng tìm kiếm: có thể tìm kiếm thông tin chấm công nhân viên theo các thông tin như tên, mã nhân viên, phòng ban

-Khi click button “Download excel” thì sẽ download được 1 file excel chứa các thông tin được hiển thị ở bảng trên

2.3.11 Màn hình thống kê chi tiết chấm công của mỗi nhân viên

 

          – Khi click vào icon mắt thì sẽ được đưa đến màn hình này

– Màn hình sẽ hiển thị ra 2 biểu đồ như trên hình để cho người dùng dễ dàng đánh giá thời gian làm việc của từng nhân viên mỗi tháng

-Màn hình cũng hiển thị danh sách thông tin chấm công từng ngày của nhân viên này

2.3.12 Màn hình thống kê lương của nhân viên

         

– Khi click “Lương nhân viên” của phần “Thống kê” ở menu bên trái thì sẽ được đưa đến màn hình này

– Màn hình sẽ hiển thị ra 1 số thông tin về lương mỗi nhân viên của các tháng trong đó có “lương thực nhận” của nhân viên trong tháng, có thể chọn tháng năm ở DatePicker

– Chức năng tìm kiếm: có thể tìm kiếm lương nhân viên qua các thông tin như tên , mã nhân viên, phòng ban

-Khi click button “Download excel” thì sẽ download được 1 file excel chứa các thông tin được hiển thị ở bảng trên

 

2.4 Thiết kế bảo mật

 

Hệ thống được xây dựng với các công nghệ chủ đạo bao gồm Node.js cho backend, React.js cho frontend và MongoDB cho cơ sở dữ liệu. Với mục tiêu đảm bảo tính bảo mật và bảo vệ dữ liệu nhân sự nhạy cảm, hệ thống đã áp dụng nhiều lớp bảo mật nhằm giảm thiểu rủi ro và bảo vệ trước các cuộc tấn công tiềm tàng.

 

2.4.1 Bảo mật trên frontend (React js)

  • Xác thự và phân quyền: Sử dụng cơ chế xác thực và phân quyền người dùng để hạn chế quyền truy cập vào các trang và chức năng cụ thể dựa trên vai trò của từng người dùng.
  • Bảo vệ dữ liệu nhạy cảm: Đảm bảo không có thông tin nhạy cảm nào (như mật khẩu hoặc dữ liệu cá nhân) được lưu trữ cục bộ trên frontend. Token xác thực chỉ được lưu trữ tạm thời trong localStorage để phục vụ cho việc đăng nhập.
  • Chống tấn công XSS: Sử dụng biện pháp mã hóa đầu vào, đồng thời sử dụng các thư viện an toàn trong React để hạn chế khả năng chèn mã độc vào giao diện.

2.4.2 Bảo mật trên backend (Node js)

  • Xác thực và mã hóa: Sử dụng JSON Web Token (JWT) để xác thực người dùng, bảo đảm mỗi phiên đăng nhập là duy nhất và hạn chế truy cập trái phép.
  • Bảo vệ API: Sử dụng cơ chế xác thực cho mỗi API để ngăn chặn truy cập trái phép từ các nguồn không đáng tin cậy. Áp dụng kỹ thuật chống tấn công Cross-Site Request Forgery (CSRF) trong các phiên làm việc để bảo vệ hệ thống khỏi việc truy cập giả mạo.
  • Sử dụng chính sách Cross-Origin Resource Sharing (CORS): Cấu hình chính sách Cross-Origin Resource Sharing (CORS) để chỉ cho phép truy cập từ các nguồn xác định, giúp bảo vệ hệ thống khỏi các yêu cầu không đáng tin cậy từ bên ngoài.

 

2.4.3 Bảo mật trên cơ sở dữ liệu (Mongodb)

         

  • Mã hóa dữ liệu: Dữ liệu nhạy cảm được mã hóa và bảo vệ trước khi lưu trữ.
  • Bảo vệ chống lại các cuộc tấn công injection: Sử dụng Mongoose ORM và các biện pháp mã hóa đầu vào để ngăn ngừa các cuộc tấn công injection, đảm bảo các lệnh truy vấn chỉ được thực hiện theo kế hoạch định sẵn.
  • Phân quyền cụ thể trên cơ sở dữ liệu, hạn chế các quyền truy cập không cần thiết.
  • Chỉ sử dụng các lệnh truy vấn và thao tác dữ liệu với các quyền hạn cần thiết để đảm bảo an toàn và tính toàn vẹn của dữ liệu.

Chương 3: Lập trình

     

3.1 Công nghệ

Công nghệ được sử dụng:

Category

Tools / Infrastructure

Technology

ReactJS (FrontEnd), Node js (BackEnd)

Database

MongoDB

IDEs/Editors

Visual Studio Code

Diagramming

DrawIO

Documentation

Google Docs/Sheets/Slides

Version Control

GitHub (Source Codes)

 

 

 

3.1.1 Backend – Nodejs

 

Node.js là nền tảng backend hiệu quả, không đồng bộ, phù hợp với ứng dụng cần tốc độ xử lý cao và khả năng mở rộng như phần mềm quản lý nhân sự. Node.js hỗ trợ các framework mạnh mẽ như Express.js, giúp xây dựng API RESTful nhanh chóng, quản lý kết nối và xử lý dữ liệu hiệu quả giữa frontend và database.

3.1.2  Fronted – Reactjs

 

React.js là thư viện JavaScript phát triển giao diện người dùng hiệu quả, giúp tạo ra các trải nghiệm mượt mà và phản hồi tức thì. Các ưu điểm của React.js gồm:

  • Component-based architecture: Dễ dàng tái sử dụng và quản lý code, giảm thiểu lỗi.
  • Virtual DOM : Tối ưu hóa hiệu suất khi cập nhật giao diện, cải thiện tốc độ hiển thị.
  • State management: Quản lý dữ liệu ở client, cho phép cập nhật nhanh các thông tin quan trọng liên quan đến nhân sự như chấm công, lương, và thông tin cá nhân.

 

3.1.3  Cơ sở dữ liệu – MongoDB

 

MongoDB là cơ sở dữ liệu NoSQL, phù hợp với các hệ thống linh hoạt, dễ mở rộng và cho phép lưu trữ dữ liệu phi cấu trúc:

  • Mô hình dữ liệu linh hoạt: Cấu trúc tài liệu (document) của MongoDB phù hợp với các dữ liệu nhân sự phong phú và đa dạng, như hồ sơ cá nhân, thông tin chấm công, lương.
  • Khả năng mở rộng: MongoDB hỗ trợ mở rộng theo chiều ngang, giúp xử lý tốt khi số lượng nhân viên và dữ liệu tăng cao.
  • Tích hợp dễ dàng với Node.js: Mongoose (ODM) hỗ trợ quản lý dữ liệu dễ dàng, cho phép xây dựng các mô hình (schema) dữ liệu hợp lý.

 

3.1.4  Thư viện được sử dụng vào phần mềm

 

 

3.1.4.1              Mongoose

 

Mongoose là một thư viện trong Node.js, được sử dụng để làm việc với MongoDB,nó cung cấp một cách dễ dàng và mạnh mẽ để mô hình hóa và quản lý dữ liệu, giúp bạn

  • Xác định Schema: Mongoose cho phép bạn định nghĩa cấu trúc dữ liệu (Schema) cho các tài liệu trong MongoDB. Điều này giúp duy trì tính nhất quán cho dữ liệu, vì bạn có thể quy định kiểu dữ liệu và các trường bắt buộc.
  • Tạo Model: Sau khi định nghĩa Schema, bạn có thể tạo một Model để tương tác với cơ sở dữ liệu. Model này cung cấp các phương thức như find, findOne, update, delete, v.v. để thực hiện các thao tác CRUD (Create, Read, Update, Delete).
  • Quản lý dữ liệu dễ dàng: Thông qua Mongoose, bạn có thể dễ dàng tạo, cập nhật, xóa, hoặc tìm kiếm các tài liệu trong MongoDB, tương tự như cách làm việc với SQL.
  • Middleware: Mongoose hỗ trợ middleware, cho phép bạn thực thi các chức năng trước hoặc sau một số hành động như save, remove. Điều này rất hữu ích nếu bạn cần thực hiện xử lý bổ sung trước hoặc sau khi lưu tài liệu.
  • Validation: Mongoose có tích hợp sẵn các phương thức kiểm tra dữ liệu để đảm bảo dữ liệu được lưu trữ chính xác, giúp giảm thiểu lỗi trong ứng dụng.
  • Kết nối với MongoDB: Mongoose cung cấp một API để kết nối và tương tác với MongoDB, giúp việc quản lý kết nối trở nên đơn giản hơn

 

3.1.4.2              Antd

 

Ant Design (antd) là một thư viện giao diện người dùng (UI library) dành cho các ứng dụng React, được phát triển bởi Ant Group (thuộc Alibaba). Ant Design cung cấp một bộ sưu tập phong phú các thành phần giao diện, công cụ và thiết kế giúp xây dựng các ứng dụng web một cách nhanh chóng, đẹp mắt và nhất quán.

Nó có 1 số đặc điểm nổi bật như

  • Bộ thành phần phong phú
  • Thiết kế nhất quán
  • Tùy chỉnh linh hoạt
  • Hỗ trợ đa ngôn ngữ
  • Cộng động và tài liệu phong phú

Ant Design giúp tiết kiệm thời gian và công sức khi phát triển giao diện người dùng, đồng thời đảm bảo giao diện trực quan và chuyên nghiệp cho ứng dụng.

 

3.2 Bảo mật

         

          Hệ thống sử dụng JWT (JSON WEB TOCKEN) để giúp tăng thêm tính bảo mật

  • JWT là một phương thức mã hóa để truyền dữ liệu giữa hai bên (thường là giữa server và client) một cách bảo mật và hiệu quả. JWT thường được sử dụng trong việc xác thực và ủy quyền (authorization) người dùng, đặc biệt phù hợp cho các ứng dụng web hiện đại nhờ tính nhẹ và khả năng truyền tải qua các giao thức HTTP.
  • 1 JWT bao gồm 3 phần chính:

+ Header: Chứa thông tin về thuật toán mã hóa và loại token (thường là JWT).

+ Payload: Chứa dữ liệu (claims) liên quan đến người dùng hoặc các thông tin cần thiết khác, như user_id, role, hoặc exp (thời gian hết hạn).

+ Signature: Được tạo bằng cách mã hóa header và payload với một khóa bí mật và thuật toán đã chỉ định (ví dụ: HMAC SHA-256). Signature đảm bảo tính toàn vẹn của token.

  • Ưu điểm của JWT:

+ Không cần duy trì trên Server: Vì thông tin người dùng được mã hóa trong token, server không cần lưu trữ session, giúp giảm tải cho hệ thống.

+ Khả năng truyền tải dữ liệu: JWT có thể mang theo nhiều thông tin, bao gồm các quyền hạn của người dùng, giúp đơn giản hóa quá trình xác thực

+ Tính bảo mật và toàn vẹn dữ liệu: Do có chữ ký số, JWT đảm bảo rằng dữ liệu bên trong không bị thay đổi trong quá trình truyền tải.

  • Ứng dụng của JWT trong hệ thống

+ Tạo tocken: Khi người dùng đăng nhập thành công, server sẽ tạo một JWT chứa thông tin xác thực (như user_id) và gửi lại cho client.

+ Lưu trữ tocken: Client sẽ lưu trữ JWTở  trong và sử dụng nó cho các lần request tiếp theo.

+ Sử dụng tocken: Khi client gửi request tới server, JWT sẽ được đính kèm trong phần header theo dạng  là Authorization: Bearer <token>.

+ Xác thực tocken: Server sẽ kiểm tra tính hợp lệ của token bằng cách kiểm tra Signature và các claims. Nếu hợp lệ, server sẽ cho phép truy cập tài nguyên.

+ Ngoài ra trong hệ thống còn được sử dụng thêm kỹ thuật refresh tocken để tăng thêm tính bảo mật cho hệ thống

 

Hệ thống còn sử dụng CORS: CORS (Cross-Origin Resource Sharing) là một cơ chế cho phép server kiểm soát những tài nguyên nào được phép truy cập từ các domain khác. Chính sách CORS được thiết kế để bảo vệ người dùng, ngăn ngừa các website độc hại không được phép truy cập vào tài nguyên nhạy cảm trên một domain khác.

CORS hoạt động qua các headers HTTP mà server gửi trong phản hồi, cho phép hoặc từ chối các yêu cầu từ domain bên ngoài. Dưới đây là một số headers quan trọng trong CORS:

  • Access-Control-Allow-Origin: Cho phép các domain cụ thể hoặc tất cả (*) truy cập vào tài nguyên của server.
  • Access-Control-Allow-Methods: Định rõ các HTTP methods (GET, POST, PUT, DELETE, v.v.) được phép sử dụng khi gửi yêu cầu từ domain khác.
  • Access-Control-Allow-Headers: Xác định những headers cụ thể mà client có thể gửi kèm với yêu cầu.
  • Access-Control-Allow-Credentials: Cho phép chia sẻ cookies hoặc thông tin xác thực giữa các domain khác nhau (nếu credentials: include được bật trong yêu cầu của client).
  • Access-Control-Max-Age: Xác định khoảng thời gian mà trình duyệt có thể lưu cache kết quả của các yêu cầu xác thực CORS, để giảm thiểu số lần yêu cầu.

 

 Chương 4: Triển khai ứng dụng

 

Source code

FE : https://github.com/anhdthe141459/quan_ly_nhan_vien_FE

BE: https://github.com/anhdthe141459/quan_ly_nhan_vien_BE

 

4.1 Cấu hình môi trường

         

          Hiện tại hệ thống đang chạy ở local

          Trước khi bắt đầu, hãy đảm bảo rằng bạn có môi trường phù hợp:

  • Có phiên bản Node.js mới nhất hoặc version >20
  • Git: Để quản lý mã nguồn và clone repository.
  • Trình duyệt hiện đại như Chorme, Firefox, Microsoft Edge, …
  • Mongodb Server

Clone repository về máy: Mở cmd ở 1 thư mục muốn lưu source và chạy câu lệnh: git clone <repository-url>   (repository-url là đường link source ở trên )

4.1.1 Cấu hình Backend (Node js)

         

          1.Tạo file .env trong thư mục backend để lưu các biến môi trường. Đây là một file không công khai, giúp giữ bí mật cho các thông tin nhạy cảm.

          2.Điền các thông tin này vào file .env

 

DATABASE_URL=mongodb+srv://anh:kingleo142000@anh.cnehn.mongodb.net/quan_ly_nhan_vien

JWT_ACCESS_KEY=access-token-key

JWT_REFRESH_KEY=-refresh-access-token-key

 

 

  1. Mở CMD ở thư mục backend rồi chạy câu lệnh “npm i” để tải các thư viện về máy
  2. Khi các thư viện được tải xong thì chạy lệnh “npm start” để chạy server ở trên local

 

4.1.2 Cấu hình Frontend (React js)

 

  1. Mở CMD ở thư mục frontend rồi chạy câu lệnh “npm i” để tải các thư viện về máy
  2. Khi các thư viện được tải xong thì chạy lệnh “npm start” để chạy ứng dụng ở trên local

 

4.1.3 Cấu hình Cơ sở dữ liệu (MongoDB)

         

         

4.2 Bảo trì ứng dụng

 

         

4.2.1 Kiểm tra định kỳ

 

Thực hiện các kiểm tra định kỳ như: kiểm tra xem có lỗi nào phát sinh không, kiểm tra hiệu suất của hệ thống,… để phát hiện và khắc phục các vấn đề trước khi chúng trở nên nghiêm trọng.

 

4.2.2 Cập nhật và Bảo mật

           

–  Cập nhật thư viện và phần mềm: Đảm bảo Node.js, React.js MongoDB, và các thư viện JavaScript luôn được cập nhật lên phiên bản ổn định mới nhất.

–  Tăng cường bảo mật JWT: Kiểm tra và cập nhật định kỳ các secret và cấu hình JWT. Đảm bảo các refresh token có thời hạn hợp lý và chính sách bảo mật nghiêm ngặt.

–  Đảm bảo ứng dụng luôn sử dụng HTTPS để bảo vệ dữ liệu truyền qua mạng.

4.2.3 Sao lưu và khôi phục dữ liệu

 

4.2.3.1 Sao lưu dữ liệu bằng mongodump      

Công cụ mongodump tạo một bản sao lưu của cơ sở dữ liệu MongoDB và lưu trữ dưới dạng tệp nén hoặc tệp JSON và BSON.
Cú pháp cơ bản:

 

“mongodump –uri=”mongodb://<username>:<password>@<host>:<port>/<database>” –out <path-to-backup>”

 

 

Các tham số: –uri: Kết nối đến cơ sở dữ liệu bằng URI.

                    –out: Thư mục để lưu trữ bản sao lưu.

Lệnh này sẽ tạo một thư mục mongodb-backup tại /backup/ và lưu các tệp sao lưu của cơ sở dữ liệu mydatabase trong đó.

4.2.3.1 Khôi phục dữ liệu bằng mongorestore

Công cụ mongorestore cho phép bạn khôi phục dữ liệu từ bản sao lưu được tạo bằng mongodump.

Cú pháp cơ bản:

 

“mongorestore –uri=”mongodb://<username>:<password>@<host>:<port>/<database>” <path-to-backup>”

 

 

Các tham số: –uri: Kết nối đến cơ sở dữ liệu để khôi phục.

                   –drop: Xóa dữ liệu cũ trước khi khôi phục (tuỳ chọn).

                   <path-to-backup>: Đường dẫn đến thư mục chứa bản sao lưu.

Lệnh trên sẽ khôi phục dữ liệu từ /backup/mongodb-backup vào cơ sở dữ liệu mydatabase trên MongoDB. Tham số –drop sẽ xóa dữ liệu cũ trước khi khôi phục, đảm bảo không có xung đột với dữ liệu mới.

 

4.2.3.3 Lưu ý khi sao lưu và khôi phục

  • Quyền truy cập: Đảm bảo tài khoản MongoDB có đủ quyền để thực hiện sao lưu và khôi phục.
  • Tính nhất quán: Nếu cơ sở dữ liệu có khối lượng giao dịch cao, hãy cân nhắc tạm dừng các giao dịch hoặc sử dụng bản sao (replica set) để sao lưu mà không ảnh hưởng đến dữ liệu hiện tại.
  • Tự động hóa: Có thể lập lịch sao lưu tự động bằng cách tạo script và lên lịch với cron job (trên Linux) hoặc Task Scheduler (trên Windows).

Các phương pháp này giúp bảo vệ dữ liệu MongoDB và đảm bảo rằng bạn có thể nhanh chóng khôi phục trong trường hợp xảy ra sự cố.

Chương 5: Kết luận

 

5.1 Kết quả đạt được

 

Nhìn chung hệ thống đã thực hiện đầy đủ các chức năng của 1 chương trình quản lý nhân sự cơ bản với giao diện đơn giản và dễ sử dụng cho người dùng.

Qua quá trình triển khai và cải tiến, hệ thống đã chứng minh được khả năng đáp ứng nhu cầu quản lý dữ liệu nhân sự một cách tối ưu với lượng dữ liệu lớn, từ quản lý thông tin cá nhân, lương thưởng đến quản lý hiệu suất truy cập.Cơ sở dữ liệu của hệ thống có thể đáp ứng lưu trữ được trên 5000 thông tin về nhân viên, 100 phòng ban và 50.000.000 bản ghi liên quan đến thông tin chấm công và bảng lương

Hệ thống được xây dựng trên nền tảng công nghệ hiện đại và có khả năng mở rộng linh hoạt, cho phép dễ dàng tích hợp thêm các chức năng mới hoặc điều chỉnh khi có sự thay đổi về quy mô nhân sự. Kiến trúc hệ thống cũng giúp giảm thiểu chi phí bảo trì và cập nhật, đảm bảo hiệu suất hoạt động ổn định trong thời gian dài.

5.2 Hạn chế

 

Hệ thống còn chưa xử lý được 1 số chức năng như quản lý tuyển dụng, quản lý đào tạo cho nhân viên,…

Chưa có thể tích họp với trực tiếp với một số phần mềm quản lý khác, chẳng hạn như phần mềm kế toán hoặc ERP (Enterprise Resource Planning). Điều này có thể gây khó khăn cho các cơ quan,  doanh nghiệp khi muốn đồng bộ dữ liệu giữa các bộ phận khác nhau.

Mặc dù hệ thống đã có các biện pháp bảo mật cơ bản, các yêu cầu bảo mật cao hơn như mã hóa dữ liệu chi tiết ở mức độ bảng và cột, hay các công cụ phát hiện xâm nhập thời gian thực chưa được triển khai đầy đủ.

 

Hệ thống quản lý nhân sự hiện tại đã đáp ứng các mục tiêu đề ra về tính hiệu quả, bảo mật, mở rộng và trải nghiệm người dùng. Sự ổn định và khả năng phát triển của hệ thống tạo điều kiện thuận lợi cho việc phát triển lâu dài, giúp cơ quan, doanh nghiệp quản lý nhân sự một cách hiệu quả và bảo mật hơn trong bối cảnh kỹ thuật số hiện nay.

5.3 Khả năng bản thân

 

Tôi có 2 năm kinh nghiệm trong việc phát triển lập trình web. Với hơn 1 năm làm việc với ReactJS ,9 tháng với Nodejs và 3 tháng với PHP Laravel

Tôi còn đã lập trình về cả mobie với 5 tháng làm việc với flutter

Ngoài ra tôi có thể sử dụng và làm việc với cả các ngôn ngữ java, c , c#

Về cơ sở dữ liệu thì tôi đã từng làm việc với SQL Server, my SQL, và mo

Bài viết liên quan