TỔNG QUAN
Lý do chọn đề tài
1.1.1 Tính thời sự của đề tài
Trường Cao đẳng Công nghệ Thủ Đức áp dụng phương pháp dạy và học dựa trên dự án thực tế, gắn liền với nhu cầu của doanh nghiệp Điều này được thể hiện qua việc tạo cơ hội cho giảng viên và sinh viên thực tập tại các công ty, mời chuyên gia đến chia sẻ kiến thức công nghệ thực tiễn, và xây dựng chương trình đào tạo cập nhật các công nghệ đang được sử dụng rộng rãi trong ngành.
… Với mong muốn sinh viên ra trường có cơ hội việc làm, làm đúng ngành nghề đã được đào tạo
Nhà trường đang phát triển các chương trình hợp tác quốc tế trong lĩnh vực đào tạo và chia sẻ kỹ thuật, đặc biệt là trong ngành Công nghệ thông tin với sự hợp tác của Tập đoàn Freesia và Trường Cao đẳng Công nghệ Công nghiệp Tokyo Chương trình đào tạo IT-TFT được xây dựng dựa trên mô hình KOSEN của Nhật Bản, kết hợp chương trình đào tạo giữa Trường Cao đẳng Công nghệ Thủ Đức và TMCIT, nhằm nâng cao chất lượng đào tạo và gắn kết giữa doanh nghiệp và trường học.
Chương trình đào tạo của Khoa CNTT chú trọng vào việc phát triển ứng dụng trên nền tảng web và thiết bị di động, đáp ứng nhu cầu tuyển dụng của các công ty Các công nghệ như Node.js, Java, Python, Kotlin, và PHP đang được áp dụng trong nhiều dự án, mang lại cơ hội cho sinh viên được tiếp cận và đào tạo sớm Điều này giúp sinh viên có lợi thế trong việc ứng tuyển vào các ngành nghề liên quan sau khi tốt nghiệp Khoa CNTT còn xây dựng hệ sinh thái phần mềm trên nền tảng web, cung cấp môi trường giảng dạy và học tập thực tiễn cho giáo viên và sinh viên.
Mô hình ACL, phát triển bởi Sentry's PHP SDK, Sentinel và Cartalyst, cùng với OAuth 2.0, đã giúp Khoa CNTT thiết kế hệ thống dịch vụ chia nhỏ thành các module xử lý nghiệp vụ và cung cấp API tương tác Nhờ đó, giảng viên và sinh viên có thể phát triển thêm tiện ích cho hệ thống Họ tham gia vào hệ sinh thái phần mềm của Khoa CNTT, có cơ hội làm việc nhóm và quản lý source code qua Git với hàng trăm thành viên và branch, rèn luyện các kỹ năng quan trọng như merge, conflict và rebase Những kỹ năng này rất cần thiết cho các dự án doanh nghiệp, nơi mà các lập trình viên phải có khả năng giải quyết vấn đề, xử lý lỗi và hợp tác hiệu quả Do đó, sinh viên có lợi thế lớn khi tìm việc làm sau khi tốt nghiệp nhờ vào quá trình thực hành trong học tập.
Kiến trúc web Khoa CNTT đã được thiết kế và hiện thực trong các NCKH năm học 2018-
Năm 2019-2020, hệ thống thư viện PHP đã được phát triển và công bố trên các dịch vụ như Github và Packagist, bao gồm các xử lý thu thập dữ liệu tự động từ StackOverflow, ITviec, VietnamWorks, cũng như quản lý lỗi bảo mật và thực tập Trong đề tài này, tác giả tiếp tục nâng cấp và đóng góp thêm các tiện ích vào hệ sinh thái, đặc biệt là phát triển ứng dụng mobile trên Android bằng Kotlin, cung cấp thêm tư liệu hữu ích cho giáo viên và sinh viên trong việc giảng dạy và học tập.
Một trong những yêu cầu quan trọng của đề tài NCKH là giải quyết vấn đề thực tiễn trong Nhà trường Trong bài viết này, tác giả phát triển một ứng dụng (web, mobile) nhằm hỗ trợ Khoa CNTT trong việc quản lý công việc một cách hiệu quả và thuận tiện.
1.1.2 Tính cấp thiết đáp ứng nhu cầu phát triển kinh tế - xã hội, nâng cao chất lượng đào tạo Đào tạo bám sát thực tiễn là yêu cầu cấp thiết mà lãnh đạo Nhà trường luôn quán triệt và đề ra đối với giảng viên Chính vì vậy trong chương trình học luôn luôn thể hiện nội dung thực tiễn mà sinh viên cần phải thực hiện Với việc tạo ra web Khoa CNTT không chỉ là trang tin tức – thông báo mà còn là một trang dịch vụ, cung cấp các tiện ích để GV và SV
Việc thiết kế web theo hướng dễ mở rộng đã tạo ra một hệ sinh thái phần mềm trên nền tảng web cho Khoa CNTT, phục vụ mục đích học tập hiệu quả.
Khoa CNTT không chỉ tập trung vào giảng dạy mà còn đảm nhận nhiều nhiệm vụ khác như xây dựng chương trình đào tạo, thực hiện nghiên cứu khoa học và tổ chức các sự kiện hợp tác doanh nghiệp Hiện tại, việc quản lý công việc của giảng viên được thực hiện qua Google Sheet, giao việc qua email, điện thoại và các cuộc họp Kết quả công việc được thống kê để xét thi đua hàng năm Tuy nhiên, trong quá trình thực hiện, một số vấn đề phát sinh do các công việc của nhiều giảng viên bị mô tả lặp lại nhiều lần.
GV, khi cần điều chỉnh 1 thông tin thống kê công việc cần thực hiện toàn bộ các Sheet, mô tả chi tiết công việc chưa được rõ ràng
Để hoàn thiện hệ sinh thái ứng dụng cho Khoa CNTT, ngoài việc phát triển các tiện ích trên nền tảng web, cần chú trọng phát triển thêm các phần mềm di động, tận dụng các dịch vụ đã được cung cấp trong hệ sinh thái web.
Tác giả đã phát triển một ứng dụng quản lý công việc tích hợp vào website của Khoa CNTT nhằm đáp ứng nhu cầu thực tiễn từ khoa Ứng dụng này còn bao gồm một phiên bản di động trên Android, cho phép người dùng nhận thông báo về công việc mới, theo dõi các công việc đã hoàn thành và xác nhận trạng thái công việc Do đó, tác giả đã chọn đề tài: “Xây dựng hệ thống quản lý công việc cho Khoa Công nghệ thông tin Trường Cao đẳng Công nghệ Thủ Đức”.
Mục đích nghiên cứu
Đề tài gồm 03 mục tiêu
1.2.1 Sử dụng Kotlin xây dựng ứng dụng trên Android Để viết ứng dụng Android có 2 ngôn ngữ chính: ngôn ngữ lập trình Java, ngôn ngữ lập trình Kotlin Trong đó ngôn ngữ lập trình Java đang là ngôn ngữ lập trình ứng dụng Android được sử dụng phổ biến nhất hiện nay, có hệ thống thư viện đa dạng, có cộng đồng người sử dụng lớn mạnh
Hình 1 - Kết quả thống kê hỏi đáp liên quan đến Java (StackOverflow)
Ngôn ngữ Kotlin, được phát triển bởi JetBrains và ra mắt lần đầu năm 2011, nhằm khắc phục các vấn đề khi lập trình ứng dụng Android bằng Java Là một ngôn ngữ mã nguồn mở, Kotlin đã được Android team công nhận là ngôn ngữ chính thức của Android Kotlin biên dịch thành JVM bytecode hoặc JavaScript, tương tự như Java, cho phép đoạn code chạy trên máy ảo thay vì trực tiếp trên bộ xử lý Điều này giúp mã nguồn có thể hoạt động trên nhiều nền tảng khác nhau sau khi được biên dịch.
Kotlin có khả năng sử dụng tất cả các nền tảng và thư viện Java hiện có, bao gồm cả các nền tảng cao cấp dựa trên xử lý annotation Quan trọng hơn, Kotlin dễ dàng tích hợp với Maven, Gradle và các hệ thống build khác.
Hình 2 - Kết quả thống kê hỏi đáp liên quan đến Kotlin (StackOverflow)
Ngôn ngữ Kotlin được xem là giải pháp lý tưởng cho việc phát triển ứng dụng Android, nhờ khả năng giảm thiểu số lượng dòng mã cần viết Điều này cho phép lập trình viên tập trung vào những vấn đề quan trọng, thay vì phải tốn thời gian xử lý các câu lệnh dài dòng.
Tìm hiểu về Kotlin, tạo ứng dụng mobile trên Android sử dụng các pattern: factory, repository, adapter; để tạo ra ứng dụng thông báo công việc đến GV
1.2.2 Phát triển package phân quyền và xác thực dùng chung cho các ứng dụng
Web Khoa CNTT đã được nâng cấp từ Laravel 7x lên Laravel 8x, PHP 7.1 lên PHP 8.x, và vẫn sử dụng MySQL 5.7 cùng CentOs 7 Việc nâng cấp này nhằm tạo ra môi trường giảng dạy và học tập phù hợp với thực tiễn cho giảng viên và sinh viên Trong quá trình nâng cấp, mã nguồn đã được điều chỉnh để các tiện ích hoạt động hiệu quả trong môi trường mới Tiện ích phân quyền và xác thực (package-acl) là thành phần quan trọng của hệ thống, cung cấp các chức năng quản lý người dùng, phân quyền và xác thực người dùng.
Khi nâng cấp ứng dụng từ PHP 7.x lên PHP 8.x, một trong những lỗi phổ biến gặp phải là lỗi type hint Để khắc phục, cần chú ý thêm cột device_token vào bảng user_profile trong lược đồ ERD.
Ví dụ một khai báo chạy được trên PHP 7.x nhưng sẽ lỗi trên PHP 8.x
PHP 8 giới thiệu nhiều ràng buộc mới về type hint, yêu cầu điều chỉnh cách xử lý để tương thích với phiên bản này Để chạy trên PHP 8.x, cần thêm kiểu dữ liệu cho biến hoặc thiết lập giá trị mặc định đầy đủ cho biến Ví dụ: public function selectItems($params = [], $id).
//Write your code here } public function selectItems(array $params = [], int $id = 0)
Deprecated: Required parameter $id follows optional parameter $params in … public function selectItems($params = [], $id = 0)
Trong bài viết này, chúng tôi sẽ phát triển ứng dụng di động, vì vậy việc xây dựng các API để xác thực người dùng là rất quan trọng khi sử dụng ứng dụng trên thiết bị di động.
Hình 4 - Lược đồ ERD của Laravel Passport sử dụng OAuth 2.0
Tích hợp package Laravel Passport vào hệ thống, cung cấp các API về xác thực cho các ứng dụng sử dụng API
Ví dụ về API xác thực người dùng
Hình 5 - Dùng Postman gửi yêu cầu xác thực
8 Thông tin khi thực hiện API xác thực người dùng
Hình 6 - Kết quả trả về sau khi thực hiện yêu cầu trên Postman
1.2.3 Phát triển ứng dụng quản lý công việc
Ngoài công việc giảng dạy, GV còn thực hiện các công tác khác theo sự phân công từ quản lý Khoa CNTT
Hình 7 - Màn hình thống kê trạng thái các việc được phân công của GV
Hình 8 - Màn hình quản lý công việc do 1 GV phụ trách
Giúp Khoa CNTT quản lý công việc của giảng viên và thống kê các nhiệm vụ đã hoàn thành trong một khoảng thời gian cụ thể Khi có công việc mới được tạo, hệ thống sẽ gửi thông báo đẩy (push notification) đến thiết bị Android của người dùng.
10 Hình 9 - Màn hình tạo thông tin công việc, mời thành viên thực hiện công việc
Hình 10 - Màn hình nhận notification khi đã cài ứng dụng trên thiết bị di động (Android)
Đối tượng và khách thể nghiên cứu
+ Đề tài được thực hiện nghiên cứu để áp dụng trong phạm vi Khoa CNTT Trường Cao đẳng Công nghệ Thủ Đức
+ Hệ thống được phát triển trên nền tảng PHP 8.x, sử dụng Laravel 8.x, Kotlin 1.6.0 + Tham khảo ý kiến đóng góp từ GV Khoa CNTT sau khi đã sử dụng hệ thống
+ Xác định công nghệ kỹ thuật cần đào tạo là nhiệm vụ hàng đầu mà Giảng viên cần thực hiện
+ Đào tạo thông qua dự án có kiến trúc như các dự án đang phát triển tại doanh nghiệp
Giúp sinh viên có cơ hội tham gia dự án và trải nghiệm trong quá trình học tập sẽ nâng cao khả năng việc làm sau khi ra trường Việc xây dựng hệ thống web Khoa CNTT với tính tương tác từ người sử dụng, bao gồm giảng viên và sinh viên, sẽ tạo ra một hệ sinh thái tiện ích mở rộng trên nền tảng này Xu hướng phát triển phần mềm hiện nay nhấn mạnh sự tương tác, từ đó tạo ra mối quan hệ khăng khít giữa người sử dụng và hệ thống, giúp hệ thống trở nên tốt hơn và đa dạng hơn Do đó, việc lựa chọn nền tảng phát triển phù hợp với nguồn lực và đặc thù của Khoa CNTT cần được xem xét một cách nghiêm túc.
Đồ án triển khai mang tính thực tế giúp sinh viên tạo sự cuốn hút trong học tập, từ đó phát triển niềm yêu thích với môn học Qua đó, sinh viên sẽ tự tìm hiểu và nghiên cứu sâu hơn về kiến thức.
+ Phương pháp nghiên cứu tài liệu
This article explores Laravel documentation and delves into key web development techniques, including RESTful API design, routing, middleware, the MVC architecture, template engines, Eloquent ORM, security measures, and access control lists.
+ Hệ sinh thái phần mềm của Khoa CNTT: package-acl, package-context, package-post,
+ Phát triển ứng dụng mobile Android với Kotlin
Nghiên cứu các tài liệu liên quan đến Kotlin, ViewModel, adapter, repository, …
Cài đặt, kiểm tra, phân tích source code Laravel và các thư viện mã nguồn mở liên quan (excel, file, security, …)
Tham khảo các thiết kế hướng monolith, microservice; áp dụng vào thiết kế hệ thống
So sánh, phân tích các tiện ích quản lý việc đã có, từ đó áp dụng vào xây dựng hệ thống
Hệ sinh thái phần mềm dựa trên nền tảng web tại Khoa CNTT được phát triển nhằm cung cấp kênh giảng dạy và học tập cho giảng viên và sinh viên, đáp ứng xu hướng đào tạo thực tiễn Đề tài này được chọn với mục tiêu cụ thể là áp dụng tại Khoa CNTT Trường Cao đẳng Công nghệ Thủ Đức.
Phần mềm được phát triển nhằm hỗ trợ Khoa CNTT trong việc quản lý công việc của giảng viên, đồng thời cung cấp cơ sở để đánh giá xếp loại hàng năm dựa trên các tiêu chí do Nhà trường quy định.
Phương pháp nghiên cứu
+ Phương pháp nghiên cứu tài liệu
Researching Laravel documentation is essential for understanding web development techniques, including RESTful API design, routing, middleware, MVC architecture, template engines, Eloquent ORM, security measures, and access control lists.
+ Hệ sinh thái phần mềm của Khoa CNTT: package-acl, package-context, package-post,
+ Phát triển ứng dụng mobile Android với Kotlin
Nghiên cứu các tài liệu liên quan đến Kotlin, ViewModel, adapter, repository, …
Cài đặt, kiểm tra, phân tích source code Laravel và các thư viện mã nguồn mở liên quan (excel, file, security, …)
Tham khảo các thiết kế hướng monolith, microservice; áp dụng vào thiết kế hệ thống
So sánh, phân tích các tiện ích quản lý việc đã có, từ đó áp dụng vào xây dựng hệ thống.
Phạm vi ảnh hưởng
Hệ sinh thái phần mềm dựa trên nền tảng web của Khoa CNTT được phát triển nhằm cung cấp kênh giảng dạy và học tập cho giảng viên và sinh viên, đáp ứng nhu cầu đào tạo thực tiễn Đề tài này được lựa chọn với phạm vi áp dụng tại Khoa CNTT, Trường Cao đẳng Công nghệ Thủ Đức.
Phần mềm được phát triển nhằm hỗ trợ Khoa CNTT trong việc quản lý công việc của giảng viên, đồng thời cung cấp cơ sở để xét thi đua và xếp loại hàng năm dựa trên các tiêu chí đã được Nhà trường quy định.
TÌM HIỂU VỀ CẤU TRÚC VÀ KỸ THUẬT XÂY DỰNG HỆ THỐNG
Tìm hiểu Kotlin
Kotlin là ngôn ngữ lập trình do JetBrains phát triển, tương thích với Java và chạy trên Java Virtual Machine, làm cho nó trở thành lựa chọn phổ biến cho các nhà phát triển Android Được Google công nhận là ngôn ngữ lập trình chính cho hệ điều hành Android, Kotlin đã được tích hợp vào Android Studio 3.0, cho phép người dùng chọn khi bắt đầu dự án mới Một số ưu điểm nổi bật của Kotlin bao gồm cú pháp gọn gàng hơn so với Java, với khả năng giảm độ dài mã lên đến 40% Hơn nữa, Kotlin cũng hỗ trợ nguyên tắc "viết một lần, chạy mọi nơi", cho phép biên dịch mã nguồn thành bytecode và chạy trên bất kỳ thiết bị nào có cài đặt JVM.
2.1.1 Tạo project với Android Kotlin
Hình 11 - Tạo project với Android Kotlin Android Studio cung cấp nhiều tiện ích khi bắt đầu tạo 1 dự án mới
Hình 12 - Màn hình khai báo thuộc tính của dự án
Giải thích ý nghĩa các thư mục
Project của ứng dụng Android sẽ chứa nhiều loại app modules, source code files và resource files khác nhau Tất cả các thư mục và file ở dưới đây
Hình 13 - Cấu trúc source của dự án Giải thích cấu trúc dự án
Thư mục này lưu trữ tất cả các file mã nguồn Java (.java) được tạo ra trong quá trình phát triển ứng dụng, bao gồm cả mã JUnit test code Khi bắt đầu một dự án mới, file lớp MainActivity.java sẽ được tự động tạo trong package com.example.projecttask.
Thư mục res (resources) là một phần quan trọng trong dự án, chứa tất cả các tài nguyên không phải mã nguồn như ảnh bitmap, chuỗi UI và bố cục XML Bên trong thư mục res, sẽ có nhiều loại thư mục khác nhau để tổ chức các tài nguyên này một cách hiệu quả.
Thư mục drawable (res/drawable)
Nó sẽ chứa các dạng ảnh khác nhau Tốt nhất nên thêm tất cả các hình ảnh vào thư mục drawable ngoại trừ các biểu tượng ứng dụng / launcher
Thư mục layout (res/layout)
Thư mục này bao gồm tất cả các file XML layout cần thiết để xác định giao diện người dùng của ứng dụng, với cấu trúc rõ ràng và hợp lý.
Hình 14 - Các file xml của ứng dụng
Thư mục mipmap (res / mipmap)
Thư mục này bao gồm các biểu tượng ứng dụng và launcher được hiển thị trên màn hình chính, với các loại biểu tượng có tỷ trọng khác nhau như hdpi, mdpi, xhdpi, xxhdpi và xxxhdpi, phù hợp với kích thước của từng thiết bị.
Hình 15 - Các biểu tượng của ứng dụng
Thư mục values (res/values)
Thư mục này sẽ chứa một số file XML khác nhau, chẳng hạn như strings, colors, styles Sau đây là cấu trúc của thư mục values
Hình 16 - Các file XML trong thư mục values
This directory will contain a Manifest file (AndroidManifest.xml) for the Android application The manifest file holds essential information about the app, including the Android version, access permissions, metadata, and the application's components It serves as an intermediary between the Android operating system and the application itself.
Sau đây là cấu trúc của thư mục manifests
Hình 17 - Cấu trúc của thư mục manifests
Trong Android, Gradle là công cụ xây dựng hệ thống được tích hợp sẵn trong Android Studio, hoạt động tự động qua phần mềm này Gradle bao gồm hai tệp quan trọng là build.gradle (Project) và build.gradle (Module), dùng để cấu hình các thiết lập cho toàn bộ ứng dụng hoặc cho từng mô-đun cụ thể.
Hình 18 - Cấu trúc của Gradle Script Sau đây là các file quan trọng cần để triển khai một ứng dụng trong android studio
File Android Layout (Activity_main.xml)
Giao diện người dùng của ứng dụng sẽ được thiết kế trong file activity_main.xml, bao gồm hai chế độ là Design và Text, và sẽ được lưu trữ trong thư mục layout Cấu trúc của file này trong chế độ Design sẽ được trình bày chi tiết như bên dưới.
Hình 19 - Cấu trúc của file activity_main.xml trong chế độ Design
Có thể chỉnh sửa file activity_main.xml bằng cách sử dụng chế độ Design hoặc Text Khi chuyển sang chế độ Text, file activity_main.xml sẽ hiển thị mã code như sau.
The article describes a layout in Android development using the `ConstraintLayout` component It includes XML namespace declarations for Android and app-specific attributes, and sets the layout's width and height to match the parent container The layout is identified by the ID `container`, which allows for easy referencing in the code This structure is essential for creating responsive and adaptable user interfaces in Android applications.
The BottomNavigationView in Android is defined with the ID "nav_view" and is set to match the parent's width while having a wrap content height It features no start or end margins and uses the window background attribute for its background Additionally, it is constrained to the bottom, left, and right of the parent layout, ensuring it stays in place The label visibility mode is set to "labeled," and it utilizes a menu resource identified as "bottom_nav_menu."
The provided XML fragment outlines the configuration for a NavHostFragment in an Android application, specifying its width to match the parent and height to be zero It establishes the fragment as the default navigation host and sets layout constraints to position it correctly within the parent layout Additionally, it links to the navigation graph defined in the mobile_navigation resource.
File Android Main Activity (MainActivity.java)
File MainActivity.java là tệp chính trong ứng dụng Android, nằm trong thư mục java, và chứa mã Java để xử lý tất cả các hoạt động liên quan đến ứng dụng.
The default code for the MainActivity.java file in the Project Task application includes the necessary imports and class declarations It begins with the package declaration and imports essential Android components such as Bundle, View, and AppCompatActivity The MainActivity class extends AppCompatActivity and initializes the ActivityMainBinding in the onCreate method The layout is set using binding.root, and a BottomNavigationView is instantiated from the binding Additionally, a NavController is obtained to manage navigation within the app, along with an AppBarConfiguration for setting up the action bar with the navigation controller.
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications)) setupActionBarWithNavController(navController, appBarConfiguration) navView.setupWithNavController(navController)
} fun showOrHideBottomBar(isHidden: Boolean) { binding.navView.visibility = if (isHidden) View.GONE else View.VISIBLE
File Android Manifest (AndroidManifest.xml)
In general, an application will contain multiple activities, and it is essential to define all activities in the AndroidManifest.xml file The manifest file must specify the main activity of the application using the MAIN action and LAUNCHER category within the intent filters () If the MAIN action and LAUNCHER category are not specified for the main activity, the application icon will not appear in the list of apps on the home screen This is a crucial aspect of the AndroidManifest.xml file for the Project Task application.
Dịch vụ FCM (FireBase Cloud Messaging)
Vào tháng 5 năm 2016, tại sự kiện Google I/O, Google đã ra mắt Firebase, một nền tảng đám mây với nhiều tính năng nổi bật dành cho lập trình viên di động, bao gồm Firebase Analytics, Firebase Cloud Messaging, Firebase Auth, Realtime Database và Firebase Storage.
Firebase Cloud Messaging (FCM) là dịch vụ miễn phí từ Google, cho phép các nhà phát triển ứng dụng gửi thông điệp nhanh chóng và an toàn tới các thiết bị cài đặt ứng dụng của họ.
Hình 24 - Kiến trúc FCM (Nguồn Firebase)
Để sử dụng dịch vụ FCM, người dùng cần tạo một dự án trên trang Firebase Trong quá trình này, hãy tải xuống các tệp cấu hình của Firebase để tích hợp vào ứng dụng di động và web.
Hình 26 - File cấu hình Firebase SDK dùng cho web và app
Khi người dùng cài đặt ứng dụng, thông tin thiết bị (device_token) sẽ được đăng ký trên server Khoa CNTT Để gửi thông báo đến FCM, chúng ta sử dụng thư viện Firebase Admin SDK.
Cài đặt Firebase Admin SDK
Autoload thư viện sau khi cài đặt
Ví dụ push notification từ server Khoa CNTT đến Firebase
Xác thực và phân quyền người dùng
2.3.1 Tiện ích quản lý công việc trong hệ sinh thái web Khoa CNTT
Quản lý người dùng (ACL) là tính năng cốt lõi của hệ thống, giúp phân quyền và quản lý người dùng hiệu quả Nhiều tiện ích hiện tại đang sử dụng hệ thống này để phát triển các chức năng như quản lý tin tức, quản lý thực tập và quản lý việc làm của giáo viên Để tích hợp, bạn có thể sử dụng lệnh composer require kreait/firebase-php và composer dump-autoload, cùng với việc sử dụng thư viện Kreait\Firebase\Factory.
$api_file = storage_path('key.json');
$factory = (new Factory)->withServiceAccount($api_file);
'token' => $deviceToken, 'notification' => $notification, // optional 'data' => $data, // optional
Hình 28 - Sơ đồ tổ chức vendor trong hệ thống web Khoa CNTT
Trong đề tài này, chúng tôi tập trung vào việc phát triển tính năng quản lý công việc (task), đồng thời cải thiện và sửa lỗi các tính năng đã có trước đó.
Cài đặt tiện ích vào web Khoa CNTT
Cài đặt database Đăng ký vào ứng dụng
Như vậy ứng dụng đã được cài đặt vào web Khoa CNTT composer require foostart/package-task php artisan migrate php artisan db:seed
File config/app.php Mục provider, đăng ký service
Việc phát triển các tiện ích trong hệ sinh thái web Khoa CNTT giúp rút ngắn thời gian phát triển nhờ vào các tiện ích cốt lõi đã được xây dựng Điều này cũng thể hiện tính dễ bảo trì và nâng cấp, do code được viết theo các tiêu chuẩn PHP (PSR 0, 1, 2, 4, …) Việc tuân thủ các ràng buộc và tiêu chuẩn trong quá trình giảng dạy và học tập giúp sinh viên nhanh chóng làm quen với các dự án thực tế khi ra trường.
Để cải thiện quản lý công việc, cần điều chỉnh thêm cột device_token (VARCHAR 500) vào bảng user_profile nhằm lưu trữ token của thiết bị di động khi người dùng sử dụng ứng dụng.
Hình 29 - Lược đồ ERD theo mô hình ACL
38 Điều chỉnh xử lý cho phép xem thông tin token của thiết bị (phục vụ cho mục đích kiểm tra xử lý push notification trên di động)
Hình 30 - Tùy chỉnh thông tin người dùng trong ACL
Để cải thiện hiệu suất xử lý, cần thêm cột type (TINYINT) vào bảng user_profile nhằm phân loại người dùng thành GV và SV Việc này giúp giảm thiểu thời gian truy xuất bảng permission để xác định quyền hạn của người dùng, từ đó cho phép phân loại và xử lý các quyền của GV và SV một cách nhanh chóng hơn.
Nâng cấp tiện ích ACL từ Laravel 7.x lên Laravel 8.x buộc phải xử lý lỗi gây ra trên PHP 8.x
Bảng 1 - Mô tả thư viện thay đổi Bảng thay đổi các thư viện hỗ trợ khi nâng cấp lên Laravel 8.x
Hệ thống đã được cải tiến cho phép người dùng đăng nhập bằng mã số GV và mã số SV, thay vì chỉ sử dụng email như trước, mang lại trải nghiệm thuận tiện hơn Ngoài ra, giao diện mới cũng giúp việc quản lý hệ thống trở nên dễ dàng hơn.
Hình 31 - Giao diện quản lý người dùng sau khi thay đổi
# ACL (Laravel 7.x) ACL (Laravel 8.x) Ghi chú
Thêm tiện ích xử lý excel vào core trong ACL dùng cho tạo tài khoản SV từ file excel
Sửa lỗi của tiện ích quản lý danh mục
Fork vendor về hệ sinh thái web Khoa giúp dễ tùy chỉnh
4 "gregwar/captcha": "1.1.91 "gregwar/captcha": "1.1.9" Phiên bản 1.1.9 hỗ trợ cho
2.3.2 Phát triển API xác thực người dùng
Sentinel là thư viện mã nguồn mở cung cấp các tiện ích xác thực và phân quyền như roles, permission và bảo mật, được phát triển bởi Cartalyst Để phù hợp với môi trường Nhà trường, cần điều chỉnh một số tính năng như tạo tài khoản từ danh sách sinh viên đăng ký môn học theo mẫu từ hệ thống TDC Online, tính năng quên mật khẩu, và cho phép đăng nhập bằng email hoặc mã số GV, SV kèm theo mật khẩu.
Để phát triển API xác thực người dùng trên thiết bị di động, Laravel Passport triển khai mô hình OAuth 2.0, mang đến nhiều tiện ích cho quá trình xác thực.
Hình 32 - Lược đồ ERD của Laravel Passport
OAuth 2.0 là một authorization framework cho phép các ứng dụng bên thứ ba có quyền truy cập hạn chế đến một dịch vụ HTTP
Trong mô hình client-server truyền thống, client xác thực với server bằng thông tin của chủ sở hữu tài nguyên nhằm truy cập vào các tài nguyên được bảo vệ hoặc hạn chế.
OAuth 2.0 là một giao thức chứng thực cho phép các ứng dụng chia sẻ một phần tài nguyên với nhau mà không cần xác thực qua username và password như cách truyền thống từ đó hạn chế được những phiền toái khi phải nhập username, password ở quá nhiều nơi hoặc đăng ký quá nhiều tài khoản mật khẩu mà chúng ta chẳng thể nào nhớ hết
OAuth 2.0 không chỉ đơn thuần là một giao thức (protocol) mà nó còn là một nền tảng (framework) giúp xây dựng ứng dụng cả ở client và server
Vai trò của OAuth 2.0 là Authentication: xác thực người dùng và Authorization: cấp quyền truy cập đến tài nguyên mà người dùng hiện đang nắm giữ
Giả sử có hai ứng dụng: ứng dụng 1 tập trung vào phát triển nguồn nhân lực và ứng dụng 2 liên quan đến hệ thống quản lý hiệu suất cho nhân viên Ứng dụng 2 sẽ cung cấp API cho ứng dụng 1, cho phép xác thực và đăng hồ sơ nhân viên, cũng như truy xuất dữ liệu hiệu suất từ ứng dụng 2.
Lý do sử dụng OAuth 2.0
+ Để đọc dữ liệu của người dùng từ một ứng dụng khác
+ Nó cung cấp quy trình authorization cho web, ứng dụng máy tính để bàn và thiết bị di động
+ Đây là một ứng dụng web phía máy chủ sử dụng authorization code và không tương tác với thông tin đăng nhập của người dùng
Hình 33 - Protocol Flow trong OAuth 2.0 (Nguồn: https://oauth.net) Trong OAuth 2.0 định nghĩa 4 vai trò:
Resource owner: là những người dùng có khả năng cấp quyền truy cập, chủ sở hữu của tài nguyên mà ứng dụng muốn lấy
Resource server: nơi lưu trữ các tài nguyên, có khả năng xử lý yêu cầu truy cập đến các tài nguyên được bảo vệ
Khách hàng là các ứng dụng bên thứ ba cần quyền truy cập vào tài nguyên được chia sẻ từ người sở hữu Trước khi các ứng dụng này có thể tiếp cận, họ phải nhận được sự ủy quyền từ người dùng.
Máy chủ ủy quyền (authorization server) có vai trò xác thực và kiểm tra thông tin do người dùng gửi, từ đó cấp quyền truy cập cho ứng dụng thông qua việc tạo ra các mã truy cập (access token) Đôi khi, máy chủ ủy quyền cũng có thể đồng thời là máy chủ tài nguyên (resource server) Khi khách hàng (client) yêu cầu một mã truy cập, máy chủ ủy quyền sẽ liên lạc với chủ sở hữu tài nguyên (resource owner) để xác nhận yêu cầu đó.
After the resource owner approves the client's requests, such as for address or phone number information, the authorization server will return a pair of keys: an access token and a refresh token.
Access token là một cặp khóa đại diện cho người dùng, có thời gian hiệu lực ngắn để đảm bảo an toàn Trong khi đó, refresh token được sử dụng để tạo mới access token khi nó hết hạn.
XÂY DỰNG, THỬ NGHIỆM VÀ ĐÁNH GIÁ HỆ THỐNG
Giới thiệu ứng dụng
Ứng dụng này được thiết kế để giúp Giảng viên Khoa Công nghệ Thông tin quản lý công việc hiệu quả Giảng viên có thể nhận nhiệm vụ qua ứng dụng web hoặc tự tạo công việc và đăng ký vào hệ thống Khi một công việc được tạo, thông báo sẽ được gửi đến thiết bị của giảng viên, giúp họ nắm rõ các nhiệm vụ cần thực hiện Điều này không chỉ hỗ trợ giảng viên trong công việc mà còn giúp Khoa Công nghệ Thông tin có hệ thống quản lý công việc hiệu quả, dễ dàng thống kê phục vụ cho công tác quản lý.
Yêu cầu của phần mềm
- Yêu cầu server triển khai ứng dụng web
+ Domain: http://fit.tdc.edu.vn
- Yêu cầu thiết bị cài ứng dụng mobile
- Sử dụng mã nguồn mở
+ Laravel Framework 8.x giấy phép “MIT License”
+ Kotlin 1.x giấy phép “Apache License Version 2.0”
Phân tích yêu cầu của hệ thống
Giới thiệu các quy trình nghiệp vụ xử lý trong hệ thống
Quy trình chung của ứng dụng trên web
Quản lý Khoa CNTT cho phép tạo công việc và mời thành viên phụ trách, đồng thời gửi thông báo đến thiết bị di động của họ Hệ thống cung cấp tính năng tìm kiếm công việc theo từ khóa, khoảng thời gian và trạng thái Ngoài ra, người dùng có thể xem thống kê số công việc mà thành viên đã được mời phụ trách và chi tiết về các công việc của từng thành viên.
GV có trách nhiệm thực hiện công việc theo mô tả, cập nhật trạng thái và thêm ghi chú cho từng công việc Họ có quyền sửa đổi thông tin nhưng không được phép mời thành viên khác phụ trách công việc GV cũng có thể xem danh sách các công việc đã hoàn thành, nhưng không có quyền xóa công việc đang đảm nhận.
Quy trình chung của ứng dụng trên di động
GV cho phép người dùng cài đặt ứng dụng trên thiết bị di động Android, đăng nhập vào hệ thống và xem danh sách các công việc đã tạo Người dùng sẽ nhận được thông báo khi có công việc được cập nhật và có thể phản hồi thông tin trạng thái công việc một cách dễ dàng.
Sử dụng Kotlin xây dựng ứng dụng trên Android
Ứng dụng quản lý công việc trên mobile có các màn hình sau
Giáo viên có thể đăng nhập vào hệ thống bằng email hoặc tên người dùng (mã số giáo viên) cùng với mật khẩu Màn hình hiển thị lần đầu tiên sẽ xuất hiện khi người dùng chưa đăng nhập.
Sequence diagram cho xử lý đăng nhập
48 Hình 37 - Sequence diagram cho tính năng đăng nhập
Hình 38 - Màn hình đăng nhập
Hình 39 - Thông tin GV sau khi đăng nhập Các tính năng mà user tương tác trên ứng dụng di động sau khi đăng nhập thành công
Hình 40 - Sequence diagram các xử lý của người dùng (đã đăng nhập)
- Màn hình thông tin GV
Màn hình thông tin GV sẽ được hiển thị sau khi đăng nhập thành công từ ứng dụng
Hình 41 - Màn hình hồ sơ (sau khi đăng nhập thành công)
- Màn hình danh sách công việc
Danh sách công việc của giáo viên được sắp xếp theo thứ tự ngày tạo giảm dần, bao gồm các thông tin quan trọng như tên công việc, ngày bắt đầu, ngày kết thúc và trạng thái hiện tại của công việc.
Hình 42 - Màn hình danh sách công việc của GV
- Màn hình chi tiết công việc
Màn hình chi tiết công việc cung cấp thông tin rõ ràng về công việc, bao gồm tên công việc, ngày bắt đầu, ngày kết thúc, mô tả chi tiết, ghi chú từ giáo viên thực hiện và trạng thái hiện tại của công việc.
GV có thể phản hồi thông tin về công việc, mô tả tại mục ghi chú GV xác nhận trạng thái công việc
Hình 43 - Màn hình chi tiết công việc của GV
- Màn hình danh sách thông báo
Giáo viên nhận được thông báo trên thiết bị di động Android Khi nhấn vào thông báo, ứng dụng sẽ tự động chuyển hướng đến danh sách công việc.
Hình 44 - Màn hình danh sách thông báo đã nhận
- Màn hình nhận thông báo trên thiết bị di động
Hình 45 - Tin nhắn gửi đến thiết bị khi có công việc mới
Phát triển ứng dụng quản lý công việc
3.5.1 Màn hình quản lý danh sách công việc
Hình 46 - Thiết kế layout master của ứng dụng web
Màn hình quản lý công việc cung cấp thống kê chi tiết về các công việc do Khoa CNTT và giảng viên tạo ra Nó hiển thị thông tin về trạng thái công việc đã được Khoa CNTT phê duyệt, cùng với các ngày bắt đầu, kết thúc và cập nhật.
+ Chọn “Quản lý công việc” từ menu của trang quản trị
+ Chọn “Danh sách” từ sidebar
+ Quyền truy cập: admin, manager
Hình 47 - Màn hình quản lý công việc
Bảng 2 - Mô tả hạng mục trong màn hình danh sách công việc
STT Tên hạng mục Điều hướng trang Địa chỉ
Trang thêm công việc mớI, hiển thị trang thêm thông tin công việc mớI hoặc cập nhật công việc admin/edit
2 Danh sách Trang quản lý công việc admin/task
3 Giảng viên Trang thống kê công việc của
4 Danh mục Trang quản lý danh mục công việc admin/categories?_key=t askab7e417e2dddc5e524 0b586d454e
5 Cấu hình Trang quản lý cấu hình của module admin/task/config
6 Ngôn ngữ Trang quản lý ngôn ngữ của module admin/task/lang
Hình 48 - Menu điều hướng trong quản lý công việc
STT Tên hạng mục Mô tả
1 Công việc Tên công việc, hỗ trợ sắp xếp công việc theo alphabet
2 Trạng thái Trạng tháI của công việc: đã xong, chưa xong, đang thực hiện, hủy Hỗ trợ sắp xếp theo trạng thái công việc
3 Ngày bắt đầu Ngày bắt đầu công việc, hỗ trợ sắp xếp tăng/giảm ngày tháng
4 Ngày kết thúc Ngày kết thúc công việ, hỗ trợ sắp xếp tăng/giảm ngày tháng
5 Ngày cập nhật Ngày cập nhật gần nhất công việc
6 Thao tác Thao tác trên công việc được chọn
+ Sửa thông tin công việc + Copy, tạo công việc mớI từ công việc được chọn + Xóa công việc được chọn
Bảng 3 - Bảng mô tả thông tin công việc
57 Hình 49 - Màn hình quản lý các công việc đã tạo
Hình 50 - Cho phép xóa công việc đã tạo
Cho phép xóa công việc đã tạo Có 2 hình thức xóa: xóa vật lý, xóa luận lý
Xóa vật lý: xóa thông tin công việc ra khỏi table
Xóa luận lý: đánh dấu công việc đã được xóa, đây là kỹ thuật xóa mặc định của hệ thống
STT Hạng mục Mô tả
1 Từ khóa Tìm kiếm công việc theo từ khóa, thông tin từ khóa sẽ được tìm kiếm trong tên công việc, mô tả công việc
2 Ngày bắt đầu Ngày bắt đầu thực hiện công việc
3 Ngày kết thúc Ngày kết thúc thực hiện công việc
4 Trạng thái Trạng thái xử lý công việc
5 Độ lớn Độ lớn công việc
6 Độ ưu tiên Độ ưu tiên xử lý công việc
7 Sorting Sắp thứ tự theo các cột: tên công việc, trạng thái, ngày bắt đầu, ngày kết thúc, ngày cập nhật
Bảng 4 - Bảng mô tả hạng mục tìm kiếm
59 Hình 51 - Tìm kiếm công việc
3.5.2 Màn hình thông tin công việc
Màn hình thông tin công việc hỗ trợ thêm mới công việc, cập nhật thông tin công việc đã có
Hình 52 - Màn hình cập nhật thông tin công việc
Mô tả các hạng mục menu
STT Hạng mục Mô tả
Thông tin công việc bao gồm mô tả tên công việc cùng các thuộc tính quan trọng như ngày bắt đầu, ngày kết thúc, danh mục công việc, độ lớn, độ ưu tiên và trạng thái công việc.
2 Mô tả chi tiết công việc
Mô tả tổng quan về công việc, mô tả chi tiết về công việc
3 Thông tin khác Đính kèm hình ảnh, file dữ liệu liên quan đến công việc cần thực hiện
Mời thành viên phụ trách thực hiện công việc Bảng 5 - Bảng mô tả hạng mục trong màn hình thông tin công việc
Thông tin công việc và các thuộc tính
Bảng 6 - Thông tin công việc và các thuộc tính
STT Hạng mục Mô tả Ràng buộc
1 Công việc Tiêu công việc Bắt buộc nhập, tối đa 255 ký tự
2 Ngày bắt đầu Ngày bắt đầu thực hiện công việc
Bắt buộc nhập, định dạng: dd- mm-yy (ngày-tháng-năm)
3 Ngày kết thúc Ngày kết thúc thực hiện công việc
Bắt buộc nhập, định dạng: dd- mm-yy (ngày-tháng-năm)
4 Danh mục công việc Danh mục công việc Bắt buộc nhập, chọn từ danh sách đã có
5 Độ lớn Độ lớn công việc Bắt buộc nhập, chọn từ danh sách đã có
6 Độ ưu tiên Độ ưu tiên công việc Bắt buộc nhập, chọn từ danh sách đã có
7 Trạng thái Trạng thái công việc Tùy chọn (mặc định là trạng thái mới tạo), từ danh sách đã có
62 Hình 53 - Màn hình cập nhật thông tin công việc bị lỗi
Màn hình cập nhật thông tin thành công
Hình 54 - Màn hình cập nhật thông tin thành công Màn hình mô tả chi tiết công việc
Hình 55 - Màn hình mô tả chi tiết công việc
Mô tả chi tiết công việc có hỗ trợ plugin Tinymce, đây là tiện ích cho phép tùy chỉnh định dạng nội dung mô tả
Hình 56 - Màn hình thêm file mô tả
Hình 57 - Màn hình mời thành viên
Hình 58 - Màn hình tìm kiếm Màn hình thống kê giảng viên và công việc đã phụ trách
Hình 59 - Màn hình thống kê giảng viên và công việc đã phụ trách
Bảng 7 – Bảng mô tả các trạng thái công việc
Hình 60 - Màn hình thống kê việc làm theo từng thành viên phụ trách
STT Hạng mục Mô tả
1 Thành viên Thành viên phụ trách công việc, GV-nhân viên trong
2 Total Tổng công việc đã phụ trách thực hiện
3 Assigned Công việc mới được giao
4 Canceled Công việc tạm dừng vì một lý do
5 Done Công việc đã hoàn thành
6 Declined Từ chối công việc
7 In progress Công việc đang thực hiện trong thời điểm hiện tại
8 Pending Công việc đã bị hoãn lại
9 Tasks Danh sách công việc của thành viên đã phụ trách
Màn hình thống kê việc làm theo từng thành viên phụ trách, thông tin hiển thị tương tự như màn hình quản lý task
Hình 61 - Màn hình quản lý danh mục