Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana untuk melaksanakan menu navigasi berasaskan kebenaran dalam Laravel

Bagaimana untuk melaksanakan menu navigasi berasaskan kebenaran dalam Laravel

WBOY
WBOYasal
2023-11-02 18:52:481324semak imbas

Bagaimana untuk melaksanakan menu navigasi berasaskan kebenaran dalam Laravel

Memandangkan fungsi tapak web dan aplikasi menjadi semakin kompleks, pengurusan kebenaran menjadi penting. Apabila pengguna log masuk melalui pengesahan, kami mahu mereka dapat mengakses halaman dan ciri yang mereka mempunyai kebenaran, tetapi bukan ke halaman dan ciri yang mereka tidak mempunyai kebenaran. Artikel ini akan menerangkan cara melaksanakan menu navigasi berasaskan kebenaran dalam Laravel supaya kami boleh mengawal perkara yang boleh dilihat pengguna dengan mudah.

Langkah 1: Pasang Laravel dan konfigurasikan pangkalan data

Jika anda sudah biasa dengan Laravel, anda boleh melangkau langkah ini. Jika tidak, ikuti langkah ini untuk memasang Laravel:

  1. Pasang Komposer: Jika anda belum memasang Komposer, sila ikuti panduan rasmi untuk memasangnya dahulu.
  2. Pasang Laravel: Buka terminal dan gunakan Komposer untuk memasang Laravel.

    composer global require laravel/installer
  3. Konfigurasikan pangkalan data: Tetapkan parameter sambungan pangkalan data dalam fail .env.

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=your_database_name
    DB_USERNAME=your_username
    DB_PASSWORD=your_password
  4. Jalankan migrasi: Jalankan migrasi pangkalan data untuk mencipta jadual yang diperlukan.

    php artisan migrate

Langkah 2: Sediakan laluan dan pengawal

Dalam contoh ini, kami akan mencipta pengawal bernama DashboardController dan mentakrifkan tiga laluan untuknya: /dashboard, /users, /roles. Semakan kebenaran yang diperlukan boleh ditambah dalam pembina pengawal.

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

class DashboardController extends Controller
{
    public function __construct()
    {
        $this->middleware(['auth', 'permissions']); // 添加授权中间件
    }

    public function index()
    {
        return view('dashboard');
    }

    public function users()
    {
        return view('users');
    }

    public function roles()
    {
        return view('roles');
    }
}

Langkah 3: Tetapkan peraturan kebenaran

Seterusnya, kita perlu menentukan peraturan kebenaran. Kami mencipta fail yang dipanggil permissions.php di mana kami mentakrifkan semua kebenaran yang diperlukan. Anda boleh mengubah suai atau menambah lebih banyak peraturan kebenaran mengikut keperluan perniagaan anda.

return [
    'admin' => [
        'dashboard' => true,
        'users' => true,
        'roles' => true,
    ],
    'editor' => [
        'dashboard' => true,
        'users' => false,
        'roles' => false,
    ],
    'user' => [
        'dashboard' => true,
        'users' => false,
        'roles' => false,
    ],
];

Langkah 4: Cipta middleware dan daftar

Kita perlu mencipta middleware untuk menyemak kebenaran pengguna. Buat perisian tengah bernama CheckPermissions dalam direktori /app/Http/Middleware.

<?php

namespace AppHttpMiddleware;

use Closure;
use IlluminateSupportFacadesAuth;

class CheckPermissions
{
    public function handle($request, Closure $next)
    {
        $user = Auth::user();
        $routeName = $request->route()->getName();

        if (!$user->hasPermission($routeName)) {
            abort(403);
        }

        return $next($request);
    }
}

Seperti yang anda lihat, middleware mendapat nama laluan daripada permintaan dan menggunakan kaedah Auth::user() untuk menyemak sama ada pengguna mempunyai kebenaran untuk mengakses laluan. Jika tiada kebenaran, status 403 Forbidden akan dikembalikan.

Maka kita perlu mendaftarkan middleware ke dalam aplikasi. Buka fail /app/Http/Kernel.php dan cari tatasusunan $middlewareGroups. Tambah perisian tengah yang dipanggil kebenaran dalam tatasusunan web.

protected $middlewareGroups = [
    'web' => [
        // ...
        AppHttpMiddlewareCheckPermissions::class,
    ],
    // ...
];

Langkah Lima: Cipta Menu Paparan dan Navigasi

Apabila mencipta menu navigasi dalam fail paparan, kita perlu menyemak sama ada pengguna mempunyai kebenaran untuk mengakses setiap pautan. Gunakan kaedah Auth::user() untuk menyemak sama ada pengguna semasa mempunyai kebenaran khusus untuk sesuatu ciri.

<nav>
    <ul>
        <li><a href="{{ route('dashboard') }}" @if (!Auth::user()->hasPermission('dashboard'))disabled@endif>Dashboard</a></li>
        <li><a href="{{ route('users') }}" @if (!Auth::user()->hasPermission('users'))disabled@endif>Users</a></li>
        <li><a href="{{ route('roles') }}" @if (!Auth::user()->hasPermission('roles'))disabled@endif>Roles</a></li>
    </ul>
</nav>

Langkah 6: Semak kebenaran

Dalam model pengguna, kami mentakrifkan kaedah yang dipanggil hasPermission(). Kaedah ini menerima nama laluan dan kemudian menyemak sama ada pengguna mempunyai akses kepada laluan itu.

public function hasPermission($routeName)
{
    $role = $this->role;
    $permissions = config('permissions.' . $role);

    return isset($permissions[$routeName]) && $permissions[$routeName];
}

Kami menggunakan fungsi config() untuk membaca peraturan kebenaran dan menyemak sama ada pengguna mempunyai kebenaran akses ke laluan. Kami juga menggunakan atribut peranan dalam model pengguna untuk mendapatkan peranan pengguna tersebut.

Kini kami telah berjaya mencipta menu navigasi berasaskan kebenaran yang melumpuhkan pautan secara automatik apabila pengguna mengakses halaman yang dilarang. Harap artikel ini dapat membantu anda menguasai cara menggunakan Laravel untuk melaksanakan menu navigasi berasaskan kebenaran.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan menu navigasi berasaskan kebenaran dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn