Laravel: Hướng dẫn cách tạo Admin với Route Group

Khi bạn xây dựng một ứng dụng Laravel và cần định nghĩa phần quản trị (Admin). Có nhiều cách làm, trong bài viết này, daipho.com xin chia sẻ cách dùng Route Group.

Đề bài

Giả sử bạn đang xây dựng một trang web bằng Laravel và trong đó có phần quản trị (admin). Bạn muốn nhóm tất cả các route liên quan đến phần quản trị và áp dụng middleware xác thực admin cho chúng. Đây là cách bạn có thể làm điều đó bằng cách sử dụng Route Group.

Route::prefix('admin')->middleware('auth', 'admin')->group(function () {
 	// Định nghĩa các route cho phần quản trị
 	Route::get('/dashboard', 'AdminController@dashboard');
 	Route::get('/users', 'AdminController@users');
 	Route::get('/settings', 'AdminController@settings');
 	// Các route khác...
});

Trong ví dụ này:

    • prefix('admin'): Thêm tiền tố “admin” vào tất cả các route trong nhóm này, do đó, tất cả các route sẽ bắt đầu với “/admin".
  • middleware('auth', 'admin'): Áp dụng middleware 'auth''admin' cho tất cả các route trong nhóm này. Middleware 'auth' sẽ xác thực người dùng, trong khi middleware 'admin' sẽ kiểm tra quyền hạn của người dùng để đảm bảo họ có quyền truy cập vào phần quản trị.
  • group(function () { /* ... */ }): Nhóm tất cả các route lại với nhau và áp dụng các thuộc tính chung cho nhóm route đó.

Mở rộng

Nếu Dai Pho có nhiều loại quyền như Admin, Editor, Creator, Dai Pho có thể sử dụng một middleware tùy chỉnh để kiểm tra quyền truy cập của người dùng dựa trên loại quyền mà họ có.

Các quyền khi thêm 1 user: admin, editor, creator. Sau đó chúng ta sẽ tạo route group kiểm tra các quyền này

Dai Pho thực hiện như sau:

Tạo Middleware Tùy Chỉnh:

Bạn có thể tạo một middleware mới, chẳng hạn là CheckRoleMiddleware, để kiểm tra quyền truy cập của người dùng dựa trên loại quyền của họ.

Middleware này sẽ kiểm tra xem người dùng có quyền tương ứng với route hay không.

<?php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class CheckRole
{
    public function handle($request, Closure $next, ...$roles)
    {
        $user = Auth::user();

        if ($user && in_array($user->role, $roles)) {
            return $next($request);
        }

        return redirect('/')->with('error', 'Unauthorized access.');
    }
}

Lưu Trữ Quyền Trong Cơ Sở Dữ Liệu:

Bạn có thể lưu trữ các loại quyền như ‘Admin‘, ‘Editor‘, ‘Creator‘ trong cơ sở dữ liệu, cùng với mỗi người dùng hoặc trong một bảng riêng biệt.

Mỗi người dùng sẽ được gán một hoặc nhiều loại quyền.

Kiểm Tra Quyền Trong Middleware:

Tiếp theo, Dai Pho sẽ sử dụng Route Group để nhóm các route có liên quan và áp dụng middleware kiểm tra quyền cho chúng.

Nếu người dùng có quyền tương ứng với route, yêu cầu sẽ tiếp tục. Nếu không, Đại Phố sẽ xử lý yêu cầu bằng cách chuyển hướng hoặc trả về một trang lỗi.

use App\Http\Middleware\CheckRole;

Route::prefix('admin')->middleware('auth')->group(function () {
    // Route cho Admin
    Route::group(['middleware' => 'role:admin'], function () {
        Route::get('/dashboard', 'AdminController@dashboard');
        // Các route admin khác...
    });

    // Route cho Editor
    Route::group(['middleware' => 'role:editor'], function () {
        Route::get('/posts', 'EditorController@posts');
        // Các route editor khác...
    });

    // Route cho Creator
    Route::group(['middleware' => 'role:creator'], function () {
        Route::get('/create', 'CreatorController@create');
        // Các route creator khác...
    });
});

Trong ví dụ này:

  • Route Group được sử dụng để nhóm các route của mỗi loại quyền truy cập (‘admin‘, ‘editor‘, ‘creator‘).
  • Mỗi Route Group áp dụng một middleware tùy chỉnh (CheckRole) để kiểm tra xem người dùng có quyền tương ứng với loại quyền được yêu cầu hay không.
  • Route của từng loại quyền được định nghĩa bên trong mỗi Route Group tương ứng.

Các tính năng mặc định của trang web

Các trang web được Đại Phố thiết kế luôn mặc định các tính năng sau:

  • Mã nguồn được tối ưu với các công cụ tìm kiếm.
  • Trang web hỗ trợ thiết bị di động, tương thích với mọi thiết bị: điện thoại, máy tính bảng, máy tính và laptop. Sử dụng công nghệ HTML5, CSS3 Mobile Responsive.
  • Dễ dàng thay đổi theo phong cách riêng của bạn.
  • Dễ dàng thêm bớt số lượng các trang, và chỉnh sửa nội hiển thị trên website tùy ý
  • Phần quản trị rõ ràng, trực quan, dễ sử dụng với cả những người không chuyên về IT.

Quản lí nội dung: có thể dễ dàng thêm, xóa, sửa các thông tin trên website

  • Thông tin sản phẩm và dịch vụ của công ty
  • Thông tin dự án, đối tác Giới thiệu – Liên hệ
  • Thông tin giới thiệu, thông tin liên hệ
  • Tin tức
  • Hình ảnh trên website, sửa các tag alt, descriotion, caption
  • Hình ảnh và caption trên Slideshow
Xin vui lòng liên hệ với chúng tôi nếu cần thêm thông tin