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

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong bài thực hành này, chúng ta sẽ thực hiện phân quyền người dùng dựa vào vai trò trong ứng dụng web.. Xây dựng module phân quyền Tạo các form thêm mới quyền, vai trò và người dùng v

Trang 1

BAN CƠ YẾU CHÍNH PHỦ

Trang 2

MỤC LỤC

1 Điều kiện tiên quyết 1

2 Giới thiệu 1

3 Kịch bản thực hành 1

4 Mục tiêu bài thực hành 1

5 Tổ chức thực hành 1

6 Môi trường thực hành 2

7 Sơ đồ thực hành 2

8 Các nhiệm vụ cần thực hiện 2

Nhiệm vụ 1 Xây dựng Database 2

Nhiệm vụ 2 Xây dựng module phân quyền 3

Nhiệm vụ 3 Thực hiện phân quyền người dùng theo vai trò 22

9 Đánh giá bài thực hành Error! Bookmark not defined.

Trang 3

DANH MỤC HÌNH ẢNH

Hình 1 Sơ đồ database 2

Hình 2 Form login 4

Hình 3 Menu bar 5

Hình 4 Form thêm mới quyền 7

Hình 5 Bảng hiển thị danh sách quyền 8

Hình 6 Tạo form thêm mới quyền 9

Hình 7 Bảng hiển thị danh sách vai trò 11

Hình 8 Form thêm mới user 15

Hình 9 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ò và quyền của user 21

Trang 4

1 Điều kiện tiên quyết

Bài thực hành xác thực người dùng trong ứng dụng Web

2 Giới thiệu

Bất kể hệ thống website nào cũng có người dùng và đi kèm với nó là việc xác thực (authentication) và phân quyền (authorization) với từng người dùng Sau khi người dùng đăng nhập thành công, nhiệm vụ tiếp theo của ứng dụng web là xác định những tài nguyên mà người dùng được phép truy cập Thao tác này được gọi

là phân quyền người dùng (users authorization) Có 3 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) và 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 được dùng là phân quyền dựa vào vai trò

Trong bài thực hành này, chúng ta sẽ thực hiện phân quyền người dùng dựa vào vai trò trong ứng dụng web

3 Kịch bản thực hành

3.1 Xây dựng database:

Xây dựng database với các 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 các form thêm mới quyền, vai trò và người dùng và các bảng hiển thị thông tin Sau đó thực hiện việc kiểm tra phân quyền

3.3 Thực hiện việc phân quyền

Trong một hệ thống sẽ có một người dùng duy nhất có quyền thiết lập mô hình phân quyền cho hệ thống Sau khi đăng nhập thành công, người quản trị ứng dụng web sẽ :

- Thiết lập vai trò của người dùng

- Thiết lập các quyền theo vai trò

- Mỗi một user sẽ có một hoặc nhiều vai trò trong hệ thống

4 Mục tiêu bài thực hành

Bài thực hành giúp chúng ta hiểu rõ:

- Hiểu rõ về cơ chế phân quyền thường dùng trong ứng dụng web

- Biết cách xây dựng chức năng phân quyền đối với một ứng dụng web

5 Tổ chức thực hành

Yêu cầu thực hành: độc lập

Thời gian: 45 phút

Trang 5

6 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ị : 1

+ Cấu hình tối thiểu của Intel Core i3, 4GB RAM

- Yêu cầu phần mềm trên máy:

+ Hệ điều hành trên 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ó

7 Sơ đồ thực hành

Không có

8 Các nhiệm vụ cần thực hiện

Nhiệm vụ 1 Xây dựng Database

Xây dựng database với các bảng và mối quan hệ giữa các bảng như sau:

Hình 1 Sơ đồ database

Tạo bảng users như sau:

ALTER TABLE users

Tạo bảng user_has_roles:

CREATE TABLE `user_has_roles`

(

Trang 6

role_id int(10) UNSIGNED NOT NULL,

)

Tạo khóa ngoại cho các bảng user_has_roles:

ALTER TABLE role_has_permissions

ADD PRIMARY KEY (id),

ADD KEY role_has_permissions_permission_id_foreign (permission_id), ADD KEY role_has_permissions_role_id_foreign (role_id);

Tạo ràng buộc giữa bảng users và bảng user_has_roles:

ALTER TABLE user_has_roles

ADD CONSTRAINT user_has_roles_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id)

Tương tự tạo và liên kết các bảng còn lại như sơ đồ trên

Nhiệm vụ 2 Xây dựng module phân quyền

Bước 1: Tạo thư mục phanquyen trong thư mục htdocs

Tạo thư mục phanquyen/includes để chứa các file thư viện kết nối database

 Bước 2: Tạo kết nối đến mysql để lấy dữ liệu:

- Tạo file database.php trong thư mục phanquyen/includes:

<?php

$database['host'] = 'localhost'; //Tên Hosting

$database['dbname'] = 'tech_php'; //Tên của Database

$database['username'] = 'root'; //Tên sử dụng Database

$database['password'] = ''; //Mật khẩu sử dụng Database

$connect=mysqli_connect("{$database['host']}","{$database['username']}","{$database['password']}"); // Tạo kết nối

mysqli_select_db($connect, "{$database['dbname']}") or die("Không thể chọn database"); // chọn bảng

mysqli_set_charset($connect, 'UTF8'); // set ngôn ngữ

?>

Sau khi tạo xong file kết nối database, khi tạo thẻ <?php ?> ở phần đầu các file php cần thêm dòng code sau để kết nối đến database:

include 'includes/database.php';

 Bước 3: Tạo liên kết tới các file css,bootstrap

Khi tạo các file php, các thẻ liên kết này thường được đặt ở phần đầu và để trong thẻ <head></head>

<link rel="stylesheet" awesome/4.7.0/css/font-awesome.min.css">

// sử dụng javasscript

<script

src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Trang 7

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js">

<div id="formContent" style="max-width:350px;margin:0 auto;">

<h1 style="font-size: 25px;font-weight: 500; margin: 30px 0 20px; text-align:

center;"> Đăng Nhập Hệ Thống </h1>

<form method="POST">

<div class="form-group">

<label for="email"> Email: </label>

<input type="email" class="form-control" id="login" name="email"

placeholder="Email">

</div>

<div class="form-group">

<label for="password">Password: </label>

<input type="password" class="form-control" id="password" name="password" placeholder="Password">

Thực hiện đoạn code sau trong thẻ <?php ?> ở phần đầu file để kiểm tra khi

người dùng click vào button Đăng nhập:

if (isset($_POST['email']) && isset($_POST['password'])) {

$email = trim($_POST['email']);

$password = trim($_POST['password']);

Trang 8

$password = md5($password); // Mã hóa md5 mật khẩu

$query = mysqli_query($connect, "SELECT

users.email, users.id as user_id, users.name as user_name,

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'

$_SESSION['auth_user']['permission_name'] = explode(',', $permissions);

header('Location: ' 'index.php'); // return redirect về login

Sử dụng đoạn code dưới đây để thực hiện đăng xuất: Khi user đăng xuất sẽ

quay trở về trang login

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 3 Menu bar

Thực hiện đoạn code sau để tạo menu:

<nav class="navbar navbar-default">

Trang 9

Kiểm tra khi user login vào sẽ có vai trò và quyền hạn nào với website, từ đó

sẽ có quyền được truy cập vào các tab menu nào bên trên, thêm dòng code sau để thực hiện kiểm tra:

<?php if(in_array('Phân quyền',$_SESSION['auth_user']['permission_name'])) {

?> // dòng này ở dưới dòng code tạo tab Trang chủ

<?php } ?> // dòng này ở dưới dòng code tạo tab Quản lý quyền

Sau khi tạo xong, khi tạo các file php thêm dòng code vào phần

<body><body> để thực hiện kết nối tới file nav.php để hiển thị menu:

Trang 10

Hình 4 Form thêm mới quyền

Thực hiện đoạn code sau để tạo form thêm mới:

<label for="name"> Tên: </label>

<input type="text" name="name" required class="form-control"> </div>

<div class="form-group">

<label for="description"> Mô tả: </label>

<textarea name="description" cols="30" rows="10" control"></textarea>

</div>

<div class="form-group">

<input type="hidden" name="add-permission" value="1">

<input type="submit" class="btn btn-sm btn-warning" value="Thêm mới">

Trang 11

$created_at = date("Y-m-d H:i:s");

$sql_insert = "INSERT INTO permission_groups(name, description, created_at) VALUES ('{$name}','{$description}','{$created_at}')";

$query_insert = mysqli_query($connect, $sql_insert);

if ($query_insert) // nếu lưu thành công {

header('Location: ' '?page=dang-nhap'); // trở về login

- Tạo bảng hiển thị danh sách quyền như sau:

Hình 5 Bảng hiển thị danh sách quyền

Thực hiện đoạn code dưới đây để tạo bảng hiển thị danh sách nhóm quyền:

Trang 12

- Tạo form thêm mới vai trò như sau:

Hình 6 Tạo form thêm mới quyền

Thực hiện đoạn code sau để tạo form thêm mới:

<div class="row">

<div class="col-md-6">

<h2> Thêm mới vai trò </h2>

</div>

Trang 13

<div class="col-md-12" style="margin-top:30px;">

<div class="col-md-6" style="max-width:500px;border:1px solid

<label for="description">Mô tả:</label>

<textarea class="form-control" name="description" cols="30"

<div class="panel panel-info">

<div class="panel-heading"> Chọn quyền: </div>

Tiếp theo thực hiện câu lệnh sau trong thẻ <?php ?> ở phần đầu file để lấy

dữ liệu từ bảng permissions, lấy tất cả các quyền có trong hệ thống để chọn quyền cho vai trò :

$sql_pms = "SELECT * FROM permissions";

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 mới”:

$role_id = false; // tạo biến role_id

('{$name}','{$description}','{$created_at}')";

$insert = mysqli_query($connect, $sql);

if ($insert == true) {

$role_id = mysqli_insert_id($connect

if (count($in_permissions) > 0 && $role_id != false) {

foreach ($in_permissions as $pms_id) {

Tạo danh sách vai trò như sau:

Hình 7 Bảng hiển thị danh sách vai trò

Thực hiện đoạn code dưới đây để tạo danh sách vai trò:

<h2> Quản lý vai trò </h2>

<a href="add-role.php" class="btn btn-sm btn-info"> Thêm mới vai trò

</a>

60px;border:1px solid #eee">

<thead>

<tr>

Trang 15

<a href="edit-role.php?id=<?= $item['id']; ?>"

class="btn btn-success btn-sm"> Sửa vai trò </a> <a onclick="return confirm('Bạn có chắc xóa không

?')" href="delete-role.php?id=<?= $item['id']; ?>" class="btn btn-warning btn-sm"> Xóa vai trò </a> </td>

 Bước 10: Tạo file edit-role.php trong thư mục phanquyen để thực hiện chỉnh sửa các vai trò:

Lưu ý: form chỉnh chửa giống form tạo mới vai trò, có thể copy bên file role.php:

add-<h2> Chỉnh sửa vai trò </h2>

<form method="post">

<div class="col-md-12" style="margin-top:30px;">

<div class="col-md-6" style="max-width:500px;border:1px solid

#eee;padding:20px;">

<div class="form-group">

<label for="name">Tên:</label>

Trang 16

<input type="text" value="<?= $role_data['name']; ?>" class="form-control" name="name">

</div>

<div class="form-group">

<label for="description">Mô tả:</label>

<textarea class="form-control" name="description" cols="30" rows="10"><?= $role_data['description']; ?></textarea>

</div>

</div>

<div class="col-md-6">

<div class="col-md-12">

<div class="panel panel-info">

<div class="panel-heading"> Chọn quyền </div>

Tiếp theo thực hiện câu lệnh truy vấn sau trong thẻ <?php ?> ở phần đầu file

để lấy dữ liệu từ bảng permissions:

// Lấy tất cả quyền đổ ra checkbox

$sql_pms = "SELECT * FROM permissions";

Trang 17

$query_role = mysqli_query($connect, "SELECT * FROM

role_has_permissions.role_id WHERE roles.id = '$id'");

// 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) {

role_has_permissions WHERE role_id = '$role_id'");

foreach ($in_permissions as $pms_id) {

$update_rl_has_pms = mysqli_query($connect, "INSERT INTO

Trang 18

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ò”:

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 mới user

Tạo form thêm user như sau:

Hình 8 Form thêm mới user

Thực hiện đoạn code sau để tạo form thêm mới:

<div class="panel" style="box-shadow: none;">

<h2 style="text-align: center;"> Thêm mới thành viên </h2>

<form class="form_add_user" method="post" action="?page=dang-ky"> <div class="form-group">

<input type="text" id="login" class="form-control" name="name" placeholder="Tên tài khoản">

Trang 19

$email = trim($_POST['email']);

$password = trim($_POST['password']);

$password = md5($password); // Mã hóa md5 mật khẩu

$sql = "INSERT INTO users(name, email, password, created_at) VALUE

Query SQL $insert = mysqli_query($connect, $sql); // Lưu Thông tin đăng ký

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

🧩 Sản phẩm bạn có thể quan tâm

w