Lab. Quản lý truy cập

Mục đích

Bổ sung tính năng quản lý truy cập cho phần mềm.

Yêu cầu:
- Bổ sung các chức năng đăng nhập (xác thực), đăng xuất
- Bổ sung tính năng duy trì phiên
- Bổ sung tính năng điều khiển truy cập

Nội dung

Download bài mẫu. Bài mẫu này kế thừa mã nguồn Lab. Kiểm tra hợp thức
  1. Tạo lại CSDL MySQL có tên là QLDT, chạy kịch bản được cung cấp trong tệp QLDT.sql để tạo các bảng và nhập dữ liệu vào CSDL vừa tạo.
  2. Vào CSDL QLDT, xem nội dung bảng `nsd`. Các người dùng có tên đăng nhập là "a", "b", và "c" đã được nhập sẵn. Mật khẩu của tất cả người dùng đều là "a123456#B"
  3. Tiếp theo, hãy xem nội dung bảng `quyensd`. Dữ liệu phân quyền này cũng được nhập sẵn. Người dùng "a" có đủ quyền trên dữ liệu sinh viên (SV), người dùng "b" chỉ được đọc, người dùng "c" không có quyền gì.
  4. Sử dụng trình duyệt, truy cập frontend.htm. Bạn sẽ được điều hướng sang trang login.htm do bạn chưa đăng nhập.
  5. Đăng nhập với người dùng bất kỳ. Sau khi đăng nhập thành công, bạn được điều hướng sang trang frontend.htm.
  6. Hãy truy cập trang login.htm, bạn sẽ được điều hướng sang trang frontend.htm do bạn đã đăng nhập trước đó.
  7. Hãy phân tích các API:
    GET /logged
    POST /login
    GET /logout

    Các API này được gọi khi nào với mục đích gì? Cài đặt bên backend của các API được thực hiện như thế nào? Trạng thái của biến $_SESSION["tsd"] được thay đổi như thế nào trước và sau khi đăng nhập thành công, sau khi đăng xuất?
  8. Hai dòng mã đầu tiên trong các phương thức proc(), getById(), addStd() của lớp StdController đảm bảo người dùng đã đăng nhập mới được truy cập chức năng tương ứng. Hãy phân tích?
    if (!isset($_SESSION["tsd"]))
         return array("status" => "NOK", "data" => "ACCESS-DENIED");
  9. Các dòng mã tiếp theo (trước mã xử lý hợp thức) trong các phương thức proc(), getById(), addStd() của lớp StdController đảm bảo người dùng được phân quyền thì mới được truy cập chức năng/dữ liệu tương ứng. Hãy phân tích?
    $user = new User();
    $rights = $user->accessRights($_SESSION["tsd"], "SV");
    if (!in_array("XXX", $rights, true))
         return array("status" => "NOK", "data" => "ACCESS-DENIED");
  10. Đăng nhập với người dùng "a". Thực hiện thêm dữ liệu và sử dụng DevTools của trình duyệt để sao chép (Copy as fetch) request truy cập đến API "POST /students/{id}".
  11. Đăng nhập với người dùng "b". Các chức năng thêm, sửa, xóa đã bị vô hiệu hóa do người dùng không có quyền. Hãy phân tích cài đặt tính năng này.
  12. Đăng nhập với người dùng "b". Sử dụng DevTools của trình duyệt, sửa đổi dữ liệu body trong request truy cập đến API "POST /students/{id}" đã sao chép ở Bước 10 rồi gửi request. Hãy phân tích response trả về.
  13. Đăng nhập với người dùng "c". Người dùng này không được xem cả danh sách. Hãy phân tích cài đặt tính năng này.
  14. Thêm bằng tay dữ liệu phân quyền cho người dùng "c" vào bảng `quyensd` trong CSDL QLDT. Truy cập lại với người dùng "c" để thấy các chức năng thêm, sửa, xóa được mở khi dữ liệu phân quyền được thêm trong CSDL.
  15. Bổ sung chức năng điều khiển truy cập cho các phương thức updateStd() và delStd() của lớp StdController.
  16. Phát triển chức năng cho admin phân quyền cho người dùng (optional).