Việc xây dựng một hệ thống đo lường kiến thức và tự luyện trực tuyến đòi hỏi tính chính xác cao về phân quyền, độ ổn định của dữ liệu và khả năng chống gian lận. Hệ thống ThiTrucTuyen được phát triển trên nền tảng Laravel 13 kết hợp Bootstrap 5 và cơ sở dữ liệu SQLite là một giải pháp tối giản, an toàn nhưng đầy đủ tính năng chuyên nghiệp đáp ứng bài toán này. Bài viết này sẽ phân tích chi tiết kiến trúc phân quyền, các tính năng cốt lõi và cách cấu hình dự án chạy ngay trên máy tính của bạn.

Demo: https://ttt.leduyle.id.vn/

1. Cơ chế phân quyền và vai trò trên hệ thống

Bản chất vấn đề: Hệ thống quản lý giáo dục yêu cầu kiểm soát dữ liệu nghiêm ngặt theo mô hình RBAC (Role-Based Access Control). Việc phân chia rõ trách nhiệm giữa 4 nhóm người dùng giúp bảo vệ toàn vẹn ngân hàng câu hỏi và đảm bảo tính minh bạch khi thi cử.

  • Quản trị viên (Admin): Toàn quyền quản trị thực thể (Lớp học, Môn học, Khối lớp, Chuyên đề). Phê duyệt tài khoản học sinh đăng ký mới. Tạo câu hỏi thủ công, nhập hàng loạt từ Word/Excel hoặc qua Gemini API. Cấu hình đề thi và xuất báo cáo kết quả.

  • Giáo viên (Teacher): Xem danh sách học sinh thuộc lớp phụ trách, cấp tài khoản cho Phụ huynh. Có quyền xem, tạo mới và chỉnh sửa câu hỏi (Không có quyền Xóa để tránh mất dữ liệu chung). Cấu hình đề thi và chấm điểm tự luận.

  • Học sinh (Student): Đăng ký tài khoản (chờ duyệt). Làm bài thi theo 2 chế độ: Thi chính thức (Có đồng hồ đếm ngược, tự động lưu Ajax phòng mất mạng, ẩn giải thích) và Luyện tập (Kiểm tra đáp án và xem giải thích lý thuyết realtime bằng Ajax). Xem lại lịch sử và điểm số.

  • Phụ huynh (Parent): Đăng nhập bằng tài khoản được cấp để giám sát thời gian thực kết quả học tập của con (Xem số lần thi, thời gian làm bài, điểm số) mà không có quyền can thiệp sâu vào hệ thống.

2. Các tính năng cốt lõi nổi bật

Hệ thống giải quyết các vấn đề thực tế trong vận hành thi cử bằng các module xử lý dữ liệu thông minh:

  • Nhập học sinh hàng loạt bằng Excel: Tích hợp bộ xác thực thông minh (Validation Engine). Khi upload file .xlsx, hệ thống quét lỗi toàn bộ các cột (kiểm tra rỗng, định dạng email, mã lớp, trùng lặp trong file hoặc trong DB). Màn hình Preview sẽ tô đỏ dòng lỗi kèm lý do chi tiết, cho phép người dùng sửa đổi hoặc bỏ qua dòng lỗi để nạp phần dữ liệu hợp lệ.

  • Quản lý và bảo mật đề thi: Hỗ trợ phân phối đề thi linh hoạt (theo trường, khối hoặc đích danh lớp). Để chống gian lận, hệ thống tự động xáo trộn thứ tự câu hỏi và 4 tùy chọn đáp án với mỗi lượt vào thi, đồng thời cắt bỏ phần giải thích đáp án trên luồng truyền dữ liệu mạng cho đến khi kỳ thi kết thúc.

Tính năng Ưu điểm Nhược điểm
Cơ sở dữ liệu SQLite Nhẹ, không cần cài đặt server DB phức tạp, dễ sao lưu (chỉ là 1 file). Không phù hợp cho hệ thống có hàng chục ngàn người truy cập ghi dữ liệu đồng thời.
Nhập liệu qua Excel có Preview Tiết kiệm thời gian, kiểm soát lỗi nhập liệu trực quan trước khi lưu vào DB. Phụ thuộc vào cấu trúc định dạng của file mẫu.
Cơ chế Auto-save khi thi Bảo vệ bài làm của học sinh tối đa khi mất điện, rớt mạng đột ngột. Tăng số lượng request liên tục lên server trong thời gian thi.

3. Hướng dẫn cài đặt và khởi chạy dự án (Setup Guide)

Để triển khai dự án ở môi trường local, máy tính của bạn cần đáp ứng các yêu cầu hệ thống cơ bản: PHP >= 8.3 (đã bật extension: zip, sqlite3, mbstring, xml), Composer, và Node.js & NPM.

 

3.1.Tải các gói phụ thuộc (Dependencies):Thực hiện qua Terminal/PowerShell.

Chạy lệnh composer install để tải các thư viện PHP backend, sau đó chạy npm install để cài đặt các package cho frontend.

3.2.Cấu hình file môi trường:Thiết lập .env.

Sao chép file mẫu .env.example thành .env. Trong file này đã được cấu hình sẵn driver cơ sở dữ liệu sử dụng SQLite tại đường dẫn database/database.sqlite.

3.3.Khởi tạo file cơ sở dữ liệu SQLite:Tạo file DB rỗng.

Trên Windows PowerShell, chạy lệnh:

New-Item -Path "database\database.sqlite" -ItemType File -Force

Trên Linux hoặc macOS, chạy lệnh:

touch database/database.sqlite

3.4.Chạy Migration và Gieo dữ liệu mẫu:Khởi tạo cấu trúc bảng và tài khoản.

Chạy lệnh php artisan migrate:fresh --seed. Hệ thống sẽ tự động thiết lập toàn bộ cấu trúc bảng và tạo sẵn các tài khoản thử nghiệm cùng ngân hàng câu hỏi mẫu.

3.5.Biên dịch Assets và Khởi chạy Server:Hoàn tất cài đặt.

Chạy lệnh npm run build để biên dịch frontend. Cuối cùng, gõ php artisan serve để kích hoạt máy chủ ảo. Ứng dụng sẽ hoạt động tại địa chỉ mặc định: [http://127.0.0.1:8000](http://127.0.0.1:8000).

 

4. Danh sách tài khoản thử nghiệm hệ thống

Sau khi hoàn tất bước chạy seeder, bạn có thể sử dụng các tài khoản mẫu sau để kiểm tra chức năng theo từng vai trò (Mật khẩu chung cho Admin, Teacher, Student là password, riêng Parent là Password123):

Lưu ý/Lỗi thường gặp

  • Lỗi không tìm thấy file database: Nếu hệ thống báo lỗi liên quan đến đường dẫn Driver SQLite, hãy kiểm tra lại xem file database.sqlite đã được tạo đúng vị trí trong thư mục database/ chưa và quyền ghi file có bị chặn không.

  • Lỗi thiếu extension PHP: Laravel 13 yêu cầu các extension cụ thể để xử lý file Excel và SQLite. Nếu chạy lệnh composer install bị lỗi, hãy mở file php.ini và bỏ dấu chấm phẩy ; ở đầu các dòng extension=pdo_sqlite, extension=sqlite3, và extension=zip để kích hoạt chúng.

Với việc kết hợp cấu trúc MVC mạnh mẽ của Laravel 13 và sự gọn nhẹ của SQLite, hệ thống ThiTrucTuyen cung cấp một giải pháp quản lý thi cử trực tuyến toàn diện, bảo mật và dễ triển khai. Việc nắm rõ cấu trúc phân quyền và quy trình thiết lập môi trường local là bước đệm quan trọng để phát triển hoặc tùy biến sâu hơn các tính năng nâng cao sau này.