Rumah > rangka kerja php > Laravel > Bagaimana untuk melaksanakan paparan berasaskan kebenaran dan menyembunyikan elemen halaman dalam Laravel

Bagaimana untuk melaksanakan paparan berasaskan kebenaran dan menyembunyikan elemen halaman dalam Laravel

王林
Lepaskan: 2023-11-03 08:35:19
asal
873 orang telah melayarinya

Bagaimana untuk melaksanakan paparan berasaskan kebenaran dan menyembunyikan elemen halaman dalam Laravel

Dalam Laravel, adalah keperluan biasa untuk melaksanakan paparan berasaskan kebenaran dan menyembunyikan elemen halaman. Artikel ini akan memperkenalkan cara menggunakan pustaka pengurusan kebenaran Laravel "spatie/laravel-permission" untuk melaksanakan fungsi memaparkan elemen halaman secara dinamik. Pada masa yang sama, untuk menggambarkan masalah dengan lebih baik, artikel ini akan menulis program contoh mudah.

1. Pasang laravel-permission

Mula-mula, anda perlu memasang pakej komposer "spatie/laravel-permission" dalam projek Laravel. Gunakan arahan berikut untuk memasang:

composer require spatie/laravel-permission
Salin selepas log masuk

Selepas pemasangan, anda perlu menjalankan migrasi untuk mencipta jadual pengurusan kebenaran yang berkaitan:

php artisan vendor:publish --provider="SpatiePermissionPermissionServiceProvider" --tag="migrations"

php artisan migrate
Salin selepas log masuk

2. Tentukan peranan dan kebenaran

Dalam contoh ini, kami akan menentukan dua peranan, iaitu "Pengurusan " "Pentadbir" dan "Pengguna Biasa", dan berikan kebenaran pentadbir untuk melihat semua data.

Mula-mula, anda perlu menambah konfigurasi model peranan dan kebenaran dalam fail config/auth.php:

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => AppModelsUser::class,
    ],

    'roles' => [
        'driver' => 'eloquent',
        'model' => SpatiePermissionModelsRole::class,
    ],

    'permissions' => [
        'driver' => 'eloquent',
        'model' => SpatiePermissionModelsPermission::class,
    ],
],
Salin selepas log masuk

Kemudian, tambahkan perkaitan dengan peranan dan kebenaran dalam model Pengguna:

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
use SpatiePermissionTraitsHasRoles;

class User extends Authenticatable
{
    use HasFactory, HasRoles;

    //...
}
Salin selepas log masuk

Kemudian anda boleh menentukan peranan dalam Seeder Dan kebenaran:

use IlluminateDatabaseSeeder;
use SpatiePermissionModelsPermission;
use SpatiePermissionModelsRole;

class RolesAndPermissionsSeeder extends Seeder
{
    public function run()
    {
        //创建角色
        Role::create(['name' => 'admin']);
        Role::create(['name' => 'user']);

        //创建权限
        Permission::create(['name' => 'view_all_data']);

        //管理员拥有所有权限
        Role::findByName('admin')->givePermissionTo(Permission::all());
    }
}
Salin selepas log masuk

3. Keizinan dan pengesahan

Seterusnya, gunakan kaedah authorize() dalam pengawal untuk menentukan sama ada pengguna mempunyai kebenaran khusus. Sebagai contoh, kaedah indeks berikut memerlukan kebenaran "view_all_data":

public function index()
{
    $this->authorize('view_all_data');
    //...
}
Salin selepas log masuk

Selain itu, dalam paparan, anda boleh menggunakan kaedah can() untuk menentukan sama ada pengguna semasa mempunyai kebenaran tertentu. Contohnya, dalam kod berikut, butang "Lihat Semua Data" akan dipaparkan hanya jika pengguna mempunyai kebenaran "lihat_semua_data":

@if(auth()->user()->can('view_all_data'))
    <button>查看所有数据</button>
@endif
Salin selepas log masuk

Jika anda mahukan kawalan yang lebih terperinci, anda boleh menggunakan kaedah role() untuk menentukan sama ada pengguna mempunyai peranan tertentu. Contohnya, dalam kod berikut, "Menu Pentadbir" akan dipaparkan hanya apabila pengguna mempunyai peranan "pentadbir":

@if(auth()->user()->hasRole('admin'))
    <menu>管理员菜单</menu>
@endif
Salin selepas log masuk

4. Penyampaian dinamik elemen halaman

Kadangkala, beberapa elemen dalam halaman perlu berdasarkan pada Peranan atau kebenaran pengguna semasa untuk dipaparkan secara dinamik. Sebagai contoh, anda boleh menetapkan bahawa hanya pentadbir boleh melihat butang "Padam":

@if(auth()->user()->can('delete_data'))
    <button>删除</button>
@endif
Salin selepas log masuk

Walau bagaimanapun, jika terdapat berbilang elemen yang perlu dipaparkan secara dinamik berdasarkan kebenaran, maka setiap elemen mesti dinilai secara individu, yang akan membawa kepada kod pertindihan dan peningkatan kos penyelenggaraan. Pada masa ini, anda boleh merangkum fungsi ini ke dalam arahan Blade dan biarkan ia menerima nama kebenaran sebagai parameter:

Blade::directive('can', function ($expression) {
    return "<?php if(auth()->user()->can({$expression})): ?>";
});

Blade::directive('endcan', function () {
    return "<?php endif; ?>";
});
Salin selepas log masuk

Menggunakan arahan ini, anda boleh memaparkan elemen halaman secara dinamik dengan cara berikut:

@can('delete_data')
    <button>删除</button>
@endcan
Salin selepas log masuk

Dengan cara ini, kod menjadi Lebih ringkas dan jelas.

Ringkasan

Dengan menggunakan perpustakaan pengurusan kebenaran Laravel "spatie/laravel-permission", kami boleh melaksanakan paparan berasaskan kebenaran dan menyembunyikan elemen halaman dengan mudah. Pada masa yang sama, merangkum kod yang dihasilkan secara dinamik ke dalam arahan Blade boleh memudahkan lagi kod dan meningkatkan kebolehbacaan dan kebolehselenggaraan kod.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan paparan berasaskan kebenaran dan menyembunyikan elemen halaman dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan