1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Phân quyền người dùng trong ứng dụng web

26 18 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 711,17 KB

Nội dung

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ HỌC PHẦN An toàn ứng dụng Web BÀI THỰC HÀNH Phân quyền người dùng ứng dụng Web Hà Nội, 2019 MỤC LỤC Điều kiện tiên Giới thiệu Kịch thực hành Mục tiêu thực hành Tổ chức thực hành Môi trường thực hành Sơ đồ thực hành Các nhiệm vụ cần thực Nhiệm vụ Xây dựng Database Nhiệm vụ Xây dựng module phân quyền Nhiệm vụ Thực phân quyền người dùng theo vai trò 22 Đánh giá thực hành Error! Bookmark not defined DANH MỤC HÌNH ẢNH Hình Sơ đồ database Hình Form login Hình Menu bar Hình Form thêm quyền Hình Bảng hiển thị danh sách quyền Hình Tạo form thêm quyền Hình Bảng hiển thị danh sách vai trò 11 Hình Form thêm user 15 Hình Bảng hiển thị danh sách user 17 Hình 10 Form gán vai trò cho user 18 Hình 11 Kiểm tra vai trị quyền user 21 ii Điều kiện tiên Bài thực hành xác thực người dùng ứng dụng Web Giới thiệu Bất kể hệ thống website có người dùng kèm với việc xác thực (authentication) phân quyền (authorization) với người dùng Sau người dùng đăng nhập thành công, nhiệm vụ ứng dụng web xác định tài nguyên mà người dùng phép truy cập Thao tác gọi phân quyền người dùng (users authorization) Có mơ hình phân quyền truy cập điển hình là: phân quyền truy cập tùy quyền (discretionary access control), phân quyền truy cập bắt buộc (mandatory access control) phân quyền dựa vào vai trò (role – based access control) Đối với ứng dụng web, mơ hình phân quyền thường dùng phân quyền dựa vào vai trò Trong thực hành này, thực phân quyền người dùng dựa vào vai trò ứng dụng web Kịch thực hành 3.1 Xây dựng database: Xây dựng database với bảng sau: users, roles, permission, user_has_roles, roles_has_permissions 3.2 Xây dựng module phân quyền Tạo form thêm quyền, vai trò người dùng bảng hiển thị thơng tin Sau thực việc kiểm tra phân quyền 3.3 Thực việc phân quyền Trong hệ thống có người dùng có quyền thiết lập mơ hình phân quyền cho hệ thống Sau đăng nhập thành công, người quản trị ứng dụng web : - Thiết lập vai trò người dùng - Thiết lập quyền theo vai trị - Mỗi user có nhiều vai trò hệ thống Mục tiêu thực hành Bài thực hành giúp hiểu rõ: - Hiểu rõ chế phân quyền thường dùng ứng dụng web - Biết cách xây dựng chức phân quyền ứng dụng web Tổ chức thực hành Yêu cầu thực hành: độc lập Thời gian: 45 phút Môi trường thực hành - Yêu cầu phần cứng: + Số lượng máy tính cần chuẩn bị : + Cấu hình tối thiểu Intel Core i3, 4GB RAM - Yêu cầu phần mềm máy: + Hệ điều hành máy tính : Window + Phần mềm : Sublime Text 3, Xampp - Yêu cầu kết nối mạng Internet: có Sơ đồ thực hành Khơng có Các nhiệm vụ cần thực Nhiệm vụ Xây dựng Database Xây dựng database với bảng mối quan hệ bảng sau: Hình Sơ đồ database Tạo bảng users sau: CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100), password VARCHAR(100), email VARCHAR(100), created_at TIMESTAMP, updated_at TIMESTAMP ) ALTER TABLE users ADD PRIMARY KEY (id); Tạo bảng user_has_roles: CREATE TABLE `user_has_roles` ( id int(10) UNSIGNED NOT NULL, role_id int(10) UNSIGNED NOT NULL, user_id int(10) UNSIGNED NOT NULL ) Tạo khóa ngoại cho bảng user_has_roles: ALTER ADD ADD ADD TABLE role_has_permissions PRIMARY KEY (id), KEY role_has_permissions_permission_id_foreign (permission_id), KEY role_has_permissions_role_id_foreign (role_id); Tạo ràng buộc bảng users bảng user_has_roles: ALTER TABLE user_has_roles ADD CONSTRAINT user_has_roles_ibfk_1 REFERENCES users (id) FOREIGN KEY (user_id) Tương tự tạo liên kết bảng lại sơ đồ Nhiệm vụ Xây dựng module phân quyền  Bước 1: Tạo thư mục phanquyen thư mục htdocs Tạo thư mục phanquyen/includes để chứa file thư viện kết nối database  Bước 2: Tạo kết nối đến mysql để lấy liệu: - Tạo file database.php thư mục phanquyen/includes: Sau tạo xong file kết nối database, tạo thẻ phần đầu include 'includes/database.php'; Bước 3: Tạo liên kết tới file css,bootstrap Khi tạo file php, thẻ liên kết thường đặt phần đầu để thẻ  // tạo title Danh sách thành viên - Hệ Thống Quản Trị // sử dụng bootstrap // sử dụng font // sử dụng javasscript Bước 4: Tạo file login.php thư mục phanquyen để thực đăng nhập: - Tạo form login sau:  Hình Form login - Thực tạo form login: Đăng Nhập Hệ Thống Email: Password: Thực đoạn code sau thẻ phần đầu file để kiểm tra if (isset($_POST['email']) && isset($_POST['password'])) { $email = trim($_POST['email']); $password = trim($_POST['password']); $password = md5($password); // Mã hóa md5 mật $query = mysqli_query($connect, "SELECT users.email, users.id as user_id, users.name as user_name, GROUP_CONCAT(permissions.name) as permission_name, user_has_roles.user_id, roles.name as role_name, roles.id as role_id FROM users LEFT JOIN user_has_roles ON users.id = user_has_roles.user_id LEFT JOIN roles ON roles.id = user_has_roles.role_id LEFT JOIN role_has_permissions ON role_has_permissions.role_id = roles.id LEFT JOIN permissions ON role_has_permissions.permission_id = permissions.id WHERE email = '$email' AND password = '$password' GROUP BY roles.id"); if (mysqli_num_rows($query) > 0) { $permissions = ''; while ($row = mysqli_fetch_array($query)) { $permissions = $row['permission_name']; $_SESSION['auth_user'] = [ 'id' => $row['user_id'], 'name' => $row['user_name'], 'email' => $row['email'] ]; } $_SESSION['auth_user']['permission_name'] = explode(',', $permissions); header('Location: ' 'index.php'); // return redirect login exit(); } else { header('Location: ' $_SERVER['HTTP_REFERER']); // return back exit; } }  Bước 5: Tạo file logout.php thư mục phanquyen để thực đăng xuất: Sử dụng đoạn code để thực đăng xuất: Khi user đăng xuất quay trở trang login  Bước 6: Tạo file nav.php thư mục phanquyen/includes để tạo menubar: Tạo menu với thông tin sau: Trang chủ, Quản lý user, Quản lý vai trò, Quản lý quyền, Đăng xuất Hình Menu bar Thực đoạn code sau để tạo menu: Kiểm tra user login vào có vai trị quyền hạn với website, từ có quyền truy cập vào tab menu bên trên, thêm dòng code sau để thực kiểm tra: // dòng dòng code tạo tab Trang chủ // dòng dòng code tạo tab Quản lý quyền Sau tạo xong, tạo file php thêm dòng code vào phần để thực kết nối tới file nav.php để hiển thị menu:  Bước 7: Tạo file permissions.php thư mục phanquyen để thực tạo hiển thị quyền hệ thống - Tạo form thêm quyền sau: Hình Form thêm quyền Thực đoạn code sau để tạo form thêm mới: Quyền Thêm Tên: Mô tả: ID Tên Mô tả Tiếp theo, thực câu lệnh SQL thẻ phần đầu file để truy vấn lấy liệu từ bảng database để hiển thị danh sách quyền: $sql = "SELECT * FROM permissions"; $query = mysqli_query($connect, $sql); $num_rows = mysqli_num_rows($query); $permissions = array(); if ($num_rows > 0) { while ($row = mysqli_fetch_array($query)) { $permissions[] = [ 'id' => $row['id'], 'name' => $row['name'], 'description' => $row['description'] ]; } } Sau thực truy vấn, thêm đoạn code sau vào thẻ để hiển thị danh sách quyền:  Bước 8: Tạo file add-role.php thư mục phanquyen để thực việc thêm vai trò cho người dùng: - Tạo form thêm vai trò sau: Hình Tạo form thêm quyền Thực đoạn code sau để tạo form thêm mới: Thêm vai trò Chọn quyền cho vai trò Tên: Mô tả: Chọn quyền: // vòng lặp lấy tất tất quyền hệ thống Hủy Tiếp theo thực câu lệnh sau thẻ phần đầu file để lấy liệu từ bảng permissions, lấy tất quyền có hệ thống để chọn quyền cho vai trò: $sql_pms = "SELECT * FROM permissions"; $query_pms = mysqli_query($connect, $sql_pms); $num_rows_pms = mysqli_num_rows($query_pms); $permissions = array(); if ($num_rows_pms > 0) { while ($row_pms = mysqli_fetch_array($query_pms)) { $permission_groups = $row_pms['permission_group']; $permissions[$permission_groups][] = [ 'id' => $row_pms['id'], 'name' => $row_pms['name'] ]; } 10 } Sau lấy tất quyền có database, sử dụng đoạn code sau để thực việc insert liệu vào bảng roles người dùng click button “Thêm mới”: $role_id = false; // tạo biến role_id $sql = "INSERT INTO roles(name,description,created_at) VALUE ('{$name}','{$description}','{$created_at}')"; $insert = mysqli_query($connect, $sql); if ($insert == true) { $role_id = mysqli_insert_id($connect if (count($in_permissions) > && $role_id != false) { foreach ($in_permissions as $pms_id) { mysqli_query($connect,"INSERT INTO role_has_permissions (permission_id,role_id) VALUE('{$pms_id}','{$role_id}')"); } } header('Location: ' 'roles.php'); exit; } else { header('Location: ' $_SERVER['HTTP_REFERER']);// return back exit; } } Bước 9: Tạo file roles.php thư mục phanquyen để hiển thị danh sách vai trò: Tạo danh sách vai trò sau:  Hình Bảng hiển thị danh sách vai trị Thực đoạn code để tạo danh sách vai trò: Quản lý vai trò Thêm vai trò 11 ID Tên Mô tả //sử dụng vòng lặp để lấy tất vai trò hệ thống Chọn quyền Hủy Tiếp theo thực câu lệnh truy vấn sau thẻ phần đầu file // Lấy tất quyền đổ checkbox $sql_pms = "SELECT * FROM permissions"; $query_pms = mysqli_query($connect, $sql_pms); $num_rows_pms = mysqli_num_rows($query_pms); $permissions = array(); if ($num_rows_pms > 0) { while ($row_pms = mysqli_fetch_array($query_pms)) { $permissions[] = [ 'id' => $row_pms['id'], 'name' => $row_pms['name'] ]; } } Sau lấy tất quyền, thực câu lệnh truy vấn sau để lấy thơng tin cũ vai trị để chỉnh sửa: if (isset($_GET['id'])) { $id = $_GET['id']; 13 $query_role = mysqli_query($connect, "SELECT * FROM roles LEFT JOIN role_has_permissions ON roles.id = role_has_permissions.role_id WHERE roles.id = '$id'"); $role_data = array(); while ( $data = mysqli_fetch_array($query_role) ) { $role_data['name'] = $data['name']; $role_data['description'] = $data['description']; $role_data['permission'][] = $data['permission_id']; } } Tiếp theo, thực kiểm tra người dùng click button “Cập nhật”: if (isset($_POST['name'])) { $name = $_POST['name']; $description = $_POST['description'] : null; $in_permissions = $_POST['permissions'] : []; isset($_POST['description']) isset($_POST['permissions']) ? ? $name = trim($name); $description = trim($description); // Kiểm tra Vai trị có hay chưa? if (mysqli_num_rows(mysqli_query($connect, "SELECT name FROM roles WHERE name = '$name' AND id '$id'")) > 0) { header('Location: ' $_SERVER['HTTP_REFERER']); // return exit; } $role_id = false;// tạo biến role_id $sql = "UPDATE roles SET name = '{$name}', description = '{$description}', updated_at = '{$date}' WHERE id = '$id'"; $update = mysqli_query($connect, $sql); if ($update) { $role_id = $id; if (count($in_permissions) > 0) { $remove = mysqli_query($connect, "DELETE FROM role_has_permissions WHERE role_id = '$role_id'"); foreach ($in_permissions as $pms_id) { $update_rl_has_pms = mysqli_query($connect, "INSERT INTO role_has_permissions(permission_id,role_id) VALUE ('{$pms_id}','{$role_id}')"); } } header('Location: ' $_SERVER['HTTP_REFERER']); exit; } else { header('Location: ' $_SERVER['HTTP_REFERER']); //return back exit; } }  Bước 11: Tạo file delete-role.php để thực xóa vai trị 14 Sử dụng đoạn code sau để thực xóa vai trị người dùng click vào button “Xóa vai trị”: if (isset($_GET['id'])) { $id = $_GET['id']; $query = mysqli_query($connect, $sql); if ($query) { header('Location: ' $_SERVER['HTTP_REFERER']); exit; } else { header('Location: ' $_SERVER['HTTP_REFERER']); return back exit; } } // Bước 12: Tạo file add-user.php để thêm user Tạo form thêm user sau:  Hình Form thêm user Thực đoạn code sau để tạo form thêm mới: Thêm thành viên 15 form_add_user { max-width: 500px; margin: auto; border: 1px solid #eee; border-radius: 3px; padding: 20px; margin-top: 50px; } class="form- btn-warning" Thực câu lệnh sau thẻ phần đầu file để kiểm tra người dùng click button “Thêm thành viên” truy vấn insert liệu: if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['password'])) { $name = trim($_POST['name']); $email = trim($_POST['email']); $password = trim($_POST['password']); $password = md5($password); // Mã hóa md5 mật $sql = "INSERT INTO users(name, email, password, created_at) VALUE ('{$name}','{$email}','{$password}','{$created_at}')"; // Tạo Query SQL $insert = mysqli_query($connect, $sql); // Lưu Thông tin đăng ký vào bảng users if ($insert) // lưu thành công { header('Location: ' '?page=dang-nhap'); // return redirect login exit; } else // thất bại { header('Location: ' $_SERVER['HTTP_REFERER']); // return back exit; } } Bước 13: Tạo file users.php thư mục phanquyen để thực hiển thị danh sách user có database: Tạo danh sách hiển thị user sau:  16 Hình Bảng hiển thị danh sách user Thực đoạn code sau để tạo danh sách user: Quản lý thành viên Thêm thành viên ID Tên Email Vai trò Chọn

Vai trò Hủy Lưu Thực truy vấn sau thẻ phần đầu file lấy liệu $sql_roles = "SELECT * FROM roles WHERE deleted_at IS NULL"; $query_roles = mysqli_query($connect, $sql_roles); $num_rows_roles = mysqli_num_rows($query_roles); $roles = array(); if ($num_rows_roles > 0) { while ($row = mysqli_fetch_array($query_roles)) { $roles[] = [ 'id' => $row['id'], 'name' => $row['name'], ]; } } 19 Sau đó, thực kiểm tra người dùng click button “Lưu”: if (isset($_POST['user_name'])) { $user_name = explode('+',$_POST['user_name']); $us_name = $user_name[0]; $us_id = $user_name[1]; } if (isset($_POST['change_role']) && $_POST['change_role'] == 1) { $us_id = $_POST['us_id']; $role_checked = $_POST['role']; $remove = mysqli_query($connect, "DELETE FROM user_has_roles WHERE user_id = '$us_id'"); foreach ($role_checked as $rl_checked) { mysqli_query($connect, "INSERT INTO user_has_roles(role_id,user_id) VALUE ('{$rl_checked}','{$us_id}')"); } header('Location: ' 'users.php'); } else { if (isset($_POST['role_group'])) { $role_group = explode(',',$_POST['role_group']); } else { header('Location: ' 'users.php'); // quay trang users exit; } }  Bước 15: Tạo file index.php thư mục phanquyen để thực kiểm tra việc phân quyền: Thực câu lệnh truy vấn sau thẻ phần đầu file lấy liệu từ bảng user_has_role để kiểm tra: $auth_id = $_SESSION['auth_user']['id']; // lấy session $sql = "SELECT GROUP_CONCAT(permissions.name) as permission_name, user_has_roles.user_id, roles.name as role_name, roles.id as role_id FROM user_has_roles LEFT JOIN roles ON roles.id = user_has_roles.role_id LEFT JOIN role_has_permissions ON role_has_permissions.role_id = roles.id LEFT JOIN permissions ON role_has_permissions.permission_id = permissions.id WHERE user_has_roles.user_id = '$auth_id' GROUP BY roles.id"; $query = mysqli_query($connect, $sql); $num_rows = mysqli_num_rows($query); $data = array(); if ($num_rows > 0) { while ($row = mysqli_fetch_array($query)) { 20 $data[] = [ 'role_name' => $row['role_name'], 'permissions' => $row['permission_name']) ]; explode(',', } } Tạo giao diện kiểm tra: Hình 11 Kiểm tra vai trò quyền user Thực giao diện kiểm tra vai trò: Xin chào ! // hiển thị tên người dùng Bạn thực hiện: :
    21

Bạn khơng có vai trò hệ thống

Nhiệm vụ Thực phân quyền người dùng theo vai trò  Bước 1: Tạo danh sách quyền Tạo danh sách quyền đây: - Thêm sản phẩm - Xem danh sách sản phẩm - Sửa sản phẩm - Xóa sản phẩm - Đăng tin tức - Xem danh sách tin tức - Xóa tin tức - Sửa tin tức - Xem danh sách user - Xóa user - Sửa user - Thêm user - Phân quyền theo vai trò - Xem danh sách đơn hàng - Xóa đơn hàng - Tạo đơn hàng  Bước 2: Tạo vai trò - Tạo vai trò Admin: Admin có tất quyền hệ thống - Tạo vai trò Biên tập viên với tất quyền sau: + Đăng tin tức + Xem danh sách tin tức + Xóa tin tức + Sửa tin tức - Tạo vai trò Nhân viên bán hàng với quyền sau: + Thêm sản phẩm + Xem danh sách sản phẩm + Sửa sản phẩm 22 +Xóa sản phẩm  Bước 3: Tạo danh sách user - Tạo user1 với vai trò Admin - Tạo user2 với vai trò Biên tập viên - Tạo user3 với vai trò Nhân viên bán hàng - Tạo user4 với vai trò Biên tập viên, Nhân viên bán hàng - Tạo user5 khơng có vai trị hệ thống  Bước 4: Kiểm tra phân quyền Đăng nhập tài khoản user kiểm tra vai trò với quyền tương ứng với vai trị 23 ... dụng Web Giới thiệu Bất kể hệ thống website có người dùng kèm với việc xác thực (authentication) phân quyền (authorization) với người dùng Sau người dùng đăng nhập thành công, nhiệm vụ ứng dụng web. .. access control) Đối với ứng dụng web, mơ hình phân quyền thường dùng phân quyền dựa vào vai trò Trong thực hành này, thực phân quyền người dùng dựa vào vai trò ứng dụng web Kịch thực hành 3.1 Xây dựng... quyền 3.3 Thực việc phân quyền Trong hệ thống có người dùng có quyền thiết lập mơ hình phân quyền cho hệ thống Sau đăng nhập thành công, người quản trị ứng dụng web : - Thiết lập vai trò người

Ngày đăng: 19/10/2021, 19:09

HÌNH ẢNH LIÊN QUAN

Hình 2. Form login - Phân quyền người dùng trong ứng dụng web
Hình 2. Form login (Trang 7)
Hình 4. Form thêm mới quyền - Phân quyền người dùng trong ứng dụng web
Hình 4. Form thêm mới quyền (Trang 10)
Hình 4. Form thêm mới quyền - Phân quyền người dùng trong ứng dụng web
Hình 4. Form thêm mới quyền (Trang 10)
- Tạo bảng hiển thị danh sách quyền như sau: - Phân quyền người dùng trong ứng dụng web
o bảng hiển thị danh sách quyền như sau: (Trang 11)
Hình 6. Tạo form thêm mới quyền - Phân quyền người dùng trong ứng dụng web
Hình 6. Tạo form thêm mới quyền (Trang 12)
Hình 7. Bảng hiển thị danh sách vai trò - Phân quyền người dùng trong ứng dụng web
Hình 7. Bảng hiển thị danh sách vai trò (Trang 14)
Sau khi lấy tất cả các quyền có trong database, sử dụng đoạn code sau để thực  hiện  việc  insert  dữ  liệu  vào  bảng  roles  khi  người  dùng  click  button  “Thêm  - Phân quyền người dùng trong ứng dụng web
au khi lấy tất cả các quyền có trong database, sử dụng đoạn code sau để thực hiện việc insert dữ liệu vào bảng roles khi người dùng click button “Thêm (Trang 14)
Sử dụng đoạn code sau để thực hiện xóa vai trò khi người dùng click vào button “Xóa vai trò”:  - Phân quyền người dùng trong ứng dụng web
d ụng đoạn code sau để thực hiện xóa vai trò khi người dùng click vào button “Xóa vai trò”: (Trang 18)
Hình 9. Bảng hiển thị danh sách user - Phân quyền người dùng trong ứng dụng web
Hình 9. Bảng hiển thị danh sách user (Trang 20)
Hình 9. Bảng hiển thị danh sách user - Phân quyền người dùng trong ứng dụng web
Hình 9. Bảng hiển thị danh sách user (Trang 20)
Hình 11 .. Kiểm tra vai trò và quyền của user - Phân quyền người dùng trong ứng dụng web
Hình 11 . Kiểm tra vai trò và quyền của user (Trang 24)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w