Authenticator và Authorization laravel là gì?
Trong thiết kế ứng dụng web, việc quản lý Authentication (quyền truy cập) là một vấn đề quan trọng và phức tạp. Laravel là một một framework phổ biến cho phát triển ứng dụng web PHP, cung cấp nhiều tính năng mạnh mẽ trong đó có hỗ trợ xác thực(Authentioncation) và phân quyền(Authorization) để giúp cho việc quản lý quyền truy cập trở nên dễ dàng hơn. Trong bài viết này, chúng ta sẽ tìm hiểu về xác thực và phân quyền trong Laravel và cách chúng ta có thể áp dụng chúng vào ứng dụng Laravel của mình.
Phân biệt giữa xác thực(Authentioncation) và phân quyền(Authorization)
Trước khi đi vào chi tiết về cách mà Laravel hỗ trợ xác thực và phân quyền, chúng ta cần phân biệt rõ ràng giữa hai khái niệm này nếu bạn chưa biết Laravel là gì? bạn có thể tham khảo thêm bài viết ở link trên.
- Xác thực(Authentication): Xác thực là quá trình xác nhận danh tính của người dùng. Trong quá trình thiết kế website, xác thực thường được sử dụng để đảm bảo rằng người dùng có quyền truy cập vào tài nguyên nào đó. Để thực hiện xác thực, người dùng thường phải cung cấp thông tin đăng nhập như tên đăng nhập và mật khẩu.
- Phân quyền(Authorization): Phân quyền là quá trình giới hạn quyền truy cập của người dùng đến các tài nguyên khác nhau. Khi người dùng đăng nhập thành công, họ được cấp quyền truy cập tới các tài nguyên nào đó trong hệ thống. Quyền truy cập này có thể được xác định dựa trên vai trò của người dùng, ví dụ như người dùng là quản trị viên hoặc người dùng là khách hàng.
Để dễ hiểu hơn thì để đăng nhập được vào website thì bạn cần sử dụng Authentication và khi bạn đăng nhập và website bạn muốn phân quyền cho người dùng nào là có quyền quản trị còn người dùng nào chỉ là người dùng thông trường trên website thì bạn dùng Authorization. Trong Laravel, xác thực và phân quyền là hai khái niệm quan trọng và liên quan mật thiết đến nhau.
Authentioncation trong Laravel
Laravel cung cấp nhiều tính năng hỗ trợ việc authentication, giúp cho việc xác thực người dùng trở nên dễ dàng hơn. Trong Laravel, xác thực được thực hiện bằng cách sử dụng một số middleware và đối tượng xác thực (authentication driver).
Middleware
Middleware trong Laravel là một cơ chế cho phép thực hiện những tác vụ xử lý trước hoặc sau khi yêu cầu được gửi đến ứng dụng. Middleware có thể được sử dụng để kiểm tra xem người dùng đã đăng nhập hay chưa, nếu chưa thì chuyển hướng người dùng đến trang đăng nhập.
Laravel cung cấp middleware 'auth' để kiểm tra xem người dùng đã đăng nhập hay chưa. Để sử dụng middleware 'auth', chúng ta chỉ cần thêm nó vào trong route:
Route::get('/dashboard', function () {
//
})->middleware('auth');
Trong đoạn code trên, khi người dùng truy cập vào route '/dashboard', middleware 'auth' sẽ được áp dụng để kiểm tra xem người dùng đã đăng nhập hay chưa. Nếu người dùng chưa đăng nhập, Laravel sẽ chuyển hướng họ đến trang đăng nhập.
Đối tượng xác thực (authentication driver)
Trong Laravel, đối tượng xác thực (authentication driver) là đối tượng được sử dụng để xác định cách thức xác thực người dùng. Laravel cung cấp các đối tượng xác thực mặc định như 'session' và 'token', và chúng ta có thể tự tạo các đối tượng xác thực khác nếu cần thiết.
Để sử dụng đối tượng xác thực, chúng ta cần cấu hình nó trong file config/auth.php. Ví dụ, để sử dụng đối tượng xác thực 'session', chúng ta chỉ cần đặt giá trị 'driver' là 'session' trong file config/auth.php:
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
// ...
],
Sau khi cấu hình xong, chúng ta có thể sử dụng các phương thức của đối tượng xác thực để thực hiện các tác vụ xác thực như đăng nhập và đăng xuất.
Phân quyền trong Laravel(Authorization laravel)
Phân quyền là quá trình giới hạn quyền truy cập của người dùng đến các tài nguyên khác nhau trong hệ thống. Trong Laravel, phân quyền được thực hiện bằng cách sử dụng middleware và các policy.
Middleware
Laravel cung cấp middleware 'can' để kiểm tra xem người dùng có quyền truy cập vào một tài nguyên nào đó hay không. Để sử dụng middleware 'can', chúng ta chỉ cần thêm nó vào trong route và truyền vào tên policy và tên tài nguyên:
Route::get('/post/{id}', function ($id) {
$post = Post::
// ...
return view('post', ['post' => $post]);
})->middleware('can:view,post');
Trong đoạn mã trên, middleware 'can' được sử dụng để kiểm tra xem người dùng có quyền truy cập vào tài nguyên post với id tương ứng hay không. Nếu người dùng không có quyền truy cập, Laravel sẽ trả về trang 403 (Forbidden).
Policy
Policy là một lớp được sử dụng để xác định quyền truy cập của người dùng đến các tài nguyên trong hệ thống. Trong Laravel, chúng ta có thể sử dụng artisan command để tạo ra các policy:
php artisan make:policy PostPolicy --model=Post
Sau khi tạo ra policy, chúng ta có thể định nghĩa các phương thức để kiểm tra quyền truy cập của người dùng đến các tài nguyên. Ví dụ, để kiểm tra xem người dùng có quyền truy cập vào một bài đăng cụ thể hay không, chúng ta có thể định nghĩa phương thức 'view' trong policy:
class PostPolicy
{
public function view(User $user, Post $post)
{
return $user->id === $post->user_id;
}
}
Trong phương thức 'view' trên, chúng ta kiểm tra xem người dùng có trùng khớp với người dùng tạo ra bài đăng hay không. Nếu trùng khớp, người dùng được cho phép truy cập vào bài đăng, ngược lại thì không.
Sau khi định nghĩa policy, chúng ta có thể sử dụng nó trong route để kiểm tra quyền truy cập của người dùng:
Route::get('/post/{id}', function ($id) {
$post = Post::findOrFail($id);
$this->authorize('view', $post);
return view('post', ['post' => $post]);
});
Trong đoạn mã trên, chúng ta sử dụng phương thức 'authorize' để kiểm tra quyền truy cập của người dùng đến tài nguyên post với id tương ứng. Nếu người dùng không có quyền truy cập, Laravel sẽ trả về trang 403 (Forbidden).
Kết luận
Authenication và authorization là hai khái niệm quan trọng trong phát triển ứng dụng web. Trong Laravel, chúng ta có thể sử dụng các đối tượng và công cụ để thực hiện các tác vụ xác thực và phân quyền một cách dễ dàng. Việc sử dụng các đối tượng và công cụ này giúp cho việc phát triển ứng dụng web trở nên đơn giản và hiệu quả hơn.
Tham khảo thêm: