Rumah  >  Artikel  >  rangka kerja php  >  Mari kita bincangkan tentang pemintas (Gates) di Laravel

Mari kita bincangkan tentang pemintas (Gates) di Laravel

青灯夜游
青灯夜游ke hadapan
2022-09-28 19:59:341673semak imbas

Mari kita bincangkan tentang pemintas (Gates) di Laravel

Laravel Gates (pemintas) membolehkan anda memberi kebenaran kepada pengguna untuk mengakses kawasan tertentu aplikasi anda. Anda boleh dengan mudah mentakrifkan pemintas dalam aplikasi anda dan kemudian menggunakannya untuk membenarkan atau menafikan akses.

Contoh mudah

Andaikan dalam jadual pengguna, terdapat lajur bernama admin, bergantung kepada sama ada pengguna itu pentadbir, ia boleh sama ada 1 atau 0. Kami boleh menjamin modul aplikasi kami dengan mudah dengan semakan mudah seperti ini:

Route::get('administration', function(){
    if(auth()->check() && auth()->user()->admin){
        echo 'Welcome to the admin section';
    } else {
        echo 'You shall not pass';
    }
});

Jika pengguna tertentu mempunyai baris admin yang ditetapkan kepada 1 , mereka akan melihat output berikut.

Admin access screenshot

Jika tidak, mereka akan melihat perkara berikut:

Admin denied access

Ini kelihatan hebat betul! Kami mempunyai cara mudah untuk membenarkan atau menafikan akses kepada bahagian tertentu aplikasi kami. Walau bagaimanapun, masalahnya ialah: bagaimana jika terdapat sejumlah besar tempat di seluruh aplikasi di mana kebenaran akses pengguna perlu disemak dan diubah suai. Kami perlu mencari kod secara global dan mengubah suai logik ini di mana-mana. Tak cekap sangat.

Untuk ini, kita boleh menentukan Gate (pemintas) dan menggunakannya sepanjang aplikasi.

Tentukan Pemintas

Untuk menentukan pemintas, anda boleh membuka fail AppProvidersAuthServiceProvider.php dan menambah yang berikut dalam kaedah boot() kami:

public function boot()
{
    $this->registerPolicies();

    Gate::define('access-admin', function ($user) {
        return $user->admin;
    });
}

Kami boleh menggunakan pemintas ini di mana-mana sahaja sepanjang aplikasi di mana kami ingin mengesahkan pengguna pentadbir. Dalam bahagian seterusnya, anda akan melihat cara kami menggunakan pemintas baharu ini.

Menggunakan Pemintas

Untuk menggunakan pemintas, kita boleh memanggil kaedah Gate::allows() atau Gate::denies() seperti berikut:

Route::get('administration', function(){
    if (Gate::allows('access-admin')) {
        echo 'Welcome to the admin section';
    } else {
        echo 'You shall not pass';
    }
});

Sila ambil perhatian: Kaedah Gate::denies() akan melakukan semakan terbalik pada Gate::allows()

Kelebihan pemintas ialah kita kini boleh menukar definisi kita pada bila-bila masa, dan logik kebenaran akan disegerakkan sepanjang perubahan aplikasi dalam program.

Tujuan lain menggunakan pemintas adalah untuk menyemak kebenaran yang berkaitan dengan data. Mengambil blog sebagai contoh, kami boleh memberikan pengguna kebenaran mengedit pada siaran yang mereka buat.

Kami boleh menghantar data kepada pemintas untuk menyemak sama ada pengguna mempunyai kebenaran untuk melakukan tindakan.

Menghantar data seperti pemintas

Katakan aplikasi kami mempunyai jadual Siaran dengan lajur user_id yang mengandungi menciptanya ID pengguna. Kami boleh mentakrifkan Gate (pemintas) untuk menentukan sama ada pengguna boleh mengedit siaran tertentu seperti ini:

Gate::define('edit-post', function ($user, $post) {
    return $user->id === $post->user_id;
});

Dua parameter dihantar ke takrifan pemintas kami. Yang pertama ialah objek $user yang mengandungi pengguna yang disahkan, dan parameter kedua ialah objek $post kami.

Petua: Jika tiada pengguna yang disahkan, pemintas akan mengembalikan palsu.

Pemintas akan membenarkan akses jika pengguna yang disahkan adalah pengarang asal; jika tidak, ia akan menafikan akses.

Berikut ialah contoh ringkas cara kita boleh menggunakan pemintas edit-post baharu.

Route::get('edit/{id}', function($id){

    $post = \App\Model\Post::find($id);

    if( Gate::allows('edit-post', $post) ){
        echo 'You can edit this post';
    } else {
        echo 'You shall not pass';
    }

});

Di atas, kami menggunakan Penutupan Laluan dalam contoh, tetapi kami mungkin mahu memetakan laluan ini kepada pengawal. Ini juga akan membolehkan kami menggunakan fungsi Kebenaran baharu.

Izinkan fungsi pembantu keizinan

Selain kecekapan, sebab lain untuk menggunakan pemintas ialah fungsi pembantu.

Dengan mengandaikan kami memetakan laluan ke pengawal:

Route::get('edit/{id}', 'PostController@edit');

Kami boleh menggunakan pembantu authorize() untuk menyemak sama ada pengguna yang disahkan mempunyai kebenaran untuk mengedit siaran:

<?php namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    public function edit($id){

        $post = Post::find($id);
        $this->authorize('edit-post', $post);

    }
}

Jika pengawal mewarisi daripada kelas asas AppHttpControllersController, anda boleh menggunakan fungsi pembantu Gate::allow() sama seperti fungsi authorize().

Akhir sekali, bagaimana jika kita ingin menyemak kebenaran dalam paparan? Kita boleh melakukan ini menggunakan @can pembantu fungsi Blade.

Pengesahan pada lapisan paparan

Anggapkan paparan Blade adalah seperti berikut:

nbsp;html>


    <meta>
    <meta>
    <title>{{ $post->title }}</title>


    <h1>{{ $post->title }}</h1>
    <p>{!! $post->body !!}</p>

Kita boleh menggunakan fungsi Blade helper @can untuk menyemak pengguna semasa Sama ada dibenarkan mengedit siaran ini:

nbsp;html>


    <meta>
    <meta>
    <title>{{ $post->title }}</title>


    <h1>{{ $post->title }}</h1>
    <p>{!! $post->body !!}</p>

    @can('edit-post', $post)
        id }}">Edit Post
    @endcan


Jika pengguna yang disahkan ialah pengarang asal siaran, mereka akan melihat butang Edit Catatan.

Menggunakan @can fungsi pembantu boleh menjadikan kod kami lebih mudah dibaca dan diurus. Anda juga boleh menggunakan @cannot untuk melakukan sebaliknya.

Ringkasan

Berikut ialah asas penggunaan Gates (pemintas) dalam aplikasi Laravel. Pemintas membenarkan kami dengan mudah membenarkan pengguna tertentu untuk mengakses kawasan aplikasi kami. Ini juga boleh dipanggil Senarai Kawalan Akses (ACL), senarai kebenaran yang dikaitkan dengan objek.

Tetapi kita tidak seharusnya terlalu merumitkan perkara... Dalam senario paling mudah, Pemintas digunakan untuk membenarkan atau menafikan akses. Pengguna boleh sama ada dibenarkan kebenaran atau dinafikan kebenaran.

Memandangkan tutorial ini adalah tentang memastikan pengguna melalui dan bukan melalui...adalah wajar untuk menghantar anda keluar dengan imej Gandalf ini daripada Lord of the Rings (kepala anjing manual).

Mari kita bincangkan tentang pemintas (Gates) di Laravel

Untuk mengetahui lebih lanjut tentang Laravel Gates (pemintas), pastikan anda melawati dokumentasi kebenaran Laravel.

Alamat asal bahasa Inggeris: https://devdojo.com/tnylea/laravel-gates

Alamat terjemahan: https://learnku.com/laravel/t/67585

[Cadangan berkaitan: tutorial video laravel]

Atas ialah kandungan terperinci Mari kita bincangkan tentang pemintas (Gates) di Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam