Bước 1: Tải dự án laravel

composer create-project –prefer-dist laravel/laravel Authorization_Gate

Lưu ý : ở đây mình đang tải laravel bằng composer và tên của dự án là Authorization_Gate.

Bước 2: Cấu hình sử dụng laravel authentication

chạy lệnh php artisan serve và truy cập link : http://127.0.0.1:8000/ để xem thành quả

Bước 3: Migrate và seeder dữ liệu

Thêm trường type trong database/migrations/create_users :

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('type')->default('user')
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

Thêm dữ liệu seeder cho bảng UserSeeder (php artisan make:seeder UserSeeder)

public function run()
    {
        DB::table('users')->insert([
            'name' => 'admin',
            'email' => 'admin@gmail.com',
            'type'  => 'admin',
            'password' => Hash::make('123456789'),
        ]);
        DB::table('users')->insert([
            'name' => 'user',
            'email' => 'user@gmail.com',
            'type'  => 'user',
            'password' => Hash::make('123456789'),
        ]);
        DB::table('users')->insert([
            'name' => 'manager',
            'email' => 'manager@gmail.com',
            'type'  => 'manager',
            'password' => Hash::make('123456789'),
        ]);
    }

Khởi chạy bằng lệnh :  php artisan migrate:fresh –seed và xem thành quả :

Bước 4: Sử dụng Gate: để cấp quyền truy cập :

laravel

tại thư mục app/Providers/AuthServiceProvider.php thêm vào phương thức boot :

 Gate::define('permission',function($user){
            return $user->type === 'admin' || $user->type === 'manager' ;
        });

Hàm trên trả về kết quả đúng nếu user đăng nhập vào có kiểu type là admin hoặc manager.
Sử dụng middleware để lọc Gate:

Route::get('/home', 'HomeController@index')->name('home')->middleware(['can:permission']);

Bước 5: Chỉnh sửa views

a. vào views/ home.blade.php  và thêm vào <p>{{ Auth::user()->type}}</p> để biết user đang login vào thuộc kiểu nào;

@extends('layouts.app')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>
                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif
                    <p> {{ Auth::user()->type }} logged in!</p>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

b.tạo views/errors/403.blade.php để xem lỗi

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h1 style="text-align: center">Bạn ko đủ quyền</h1>  
    <a class="dropdown-item" href="{{ route('logout') }}"
    onclick="event.preventDefault();
                  document.getElementById('logout-form').submit();">
     {{ __('Logout') }}
    </a>
    <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
        @csrf
    </form>
</body>
</html>

Bước 6: Xem thành quả

a . login bằng tài khoản admin:laravel

b. login bằng tài khoản manager:

laravel

c. login bằng tài khoản user:

Author: Phan Thiên Hoàng

Đăng ký nhận bộ tài liệu học Java trên 2 trang giấy tại đây

Xem thêm: Java Coding Bootcamp là gì? Tổng quan về Java Coding Bootcamp