Rumah rangka kerja php Laravel Bagaimana untuk melaksanakan kawalan akses berasaskan peranan dalam Laravel

Bagaimana untuk melaksanakan kawalan akses berasaskan peranan dalam Laravel

Nov 02, 2023 pm 03:15 PM
laravel Peranan kawalan capaian

Bagaimana untuk melaksanakan kawalan akses berasaskan peranan dalam Laravel

Cara melaksanakan kawalan akses berasaskan peranan dalam Laravel

Petikan:
Dalam aplikasi web, kawalan akses ialah bahagian penting dalam melindungi data sensitif dan operasi sensitif. Kawalan capaian berasaskan peranan ialah strategi kawalan capaian biasa yang membolehkan kami mengehadkan tindakan yang boleh dilakukan oleh pengguna berdasarkan peranan mereka.

Laravel ialah rangka kerja PHP yang popular yang menyediakan ciri ringkas namun berkuasa untuk melaksanakan kawalan akses berasaskan peranan. Dalam artikel ini, kami akan membincangkan cara melaksanakan kawalan akses berasaskan peranan menggunakan Laravel dan menyediakan beberapa contoh kod konkrit.

Langkah 1: Sediakan pangkalan data
Pertama, kita perlu mencipta pangkalan data untuk menyimpan maklumat pengguna, peranan dan kebenaran. Kita boleh menggunakan ciri migrasi Laravel untuk mencipta jadual pangkalan data. Berikut ialah contoh fail migrasi pengguna, peranan dan kebenaran:

<?php

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

class CreateRolesAndPermissionsTables extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // 创建角色表
        Schema::create('roles', function (Blueprint $table) {
            $table->id();
            $table->string('name')->unique();
            $table->timestamps();
        });

        // 创建权限表
        Schema::create('permissions', function (Blueprint $table) {
            $table->id();
            $table->string('name')->unique();
            $table->timestamps();
        });

        // 创建用户表
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamps();
        });

        // 创建用户角色表
        Schema::create('role_user', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->unsignedBigInteger('role_id');
            $table->timestamps();
        });

        // 创建角色权限表
        Schema::create('permission_role', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('permission_id');
            $table->unsignedBigInteger('role_id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        // 删除表格
        Schema::dropIfExists('permission_role');
        Schema::dropIfExists('role_user');
        Schema::dropIfExists('users');
        Schema::dropIfExists('permissions');
        Schema::dropIfExists('roles');
    }
}

Jalankan arahan migrasi untuk mencipta jadual pangkalan data:

php artisan migrate

Langkah 2: Tentukan model dan perhubungan
Dalam Laravel, kita boleh menggunakan model dan perhubungan untuk mengurus pengguna , Data seperti peranan dan kebenaran. Berikut ialah contoh model dan definisi perhubungan:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;

class User extends Authenticatable
{
    use HasFactory;

    /**
     * 获取用户的角色
     */
    public function roles()
    {
        return $this->belongsToMany(Role::class, 'role_user');
    }

    /**
     * 检查用户是否具有指定角色
     */
    public function hasRole($role)
    {
        return $this->roles->contains('name', $role);
    }
}

class Role extends Model
{
    use HasFactory;

    /**
     * 获取角色的权限
     */
    public function permissions()
    {
        return $this->belongsToMany(Permission::class, 'permission_role');
    }
}

class Permission extends Model
{
    use HasFactory;
}

Langkah 3: Tentukan dasar
Dalam Laravel, dasar digunakan untuk menentukan kebenaran pengguna yang disahkan kepada sumber tertentu. Kami boleh menggunakan dasar untuk melaksanakan kawalan akses berasaskan peranan. Berikut ialah contoh definisi dasar:

<?php

namespace AppPolicies;

use AppModelsUser;
use IlluminateAuthAccessHandlesAuthorization;

class PostPolicy
{
    use HandlesAuthorization;

    /**
     * 确定用户是否有权限更新一个帖子
     */
    public function update(User $user, Post $post)
    {
        return $user->hasRole('admin') || $user->hasRole('editor');
    }
}

Langkah Empat: Daftar Polisi
Untuk menggunakan polisi, kami perlu mendaftarkannya dengan penyedia polisi Laravel. Buka fail app/Providers/AuthServiceProvider.php dan tambah kod berikut:

<?php

namespace AppProviders;

use IlluminateSupportFacadesGate;
use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;
use AppPoliciesPostPolicy;

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        'AppModelsPost' => 'AppPoliciesPostPolicy',
    ];

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

Langkah Lima: Gunakan Middleware
Untuk melaksanakan kawalan akses berasaskan peranan, kami boleh menggunakan perisian tengah Laravel dalam laluan dan pengawal untuk mengesahkan peranan pengguna. Berikut ialah contoh definisi perisian tengah:

<?php

namespace AppHttpMiddleware;

use Closure;

class RoleMiddleware
{
    public function handle($request, Closure $next, ...$roles)
    {
        if (!$request->user()->hasAnyRole($roles)) {
            abort(403, 'Unauthorized action.');
        }

        return $next($request);
    }
}

Langkah 6: Gunakan perisian tengah untuk menyekat akses laluan
Akhir sekali, kami boleh menggunakan perisian tengah pada laluan atau kumpulan laluan tertentu untuk menyekat akses pengguna. Berikut ialah kod untuk laluan contoh:

<?php

use AppHttpMiddlewareRoleMiddleware;

Route::get('/admin/dashboard', function () {
    // 管理员和编辑者才能访问
})->middleware(RoleMiddleware::class . ':admin,editor');

Ringkasan:
Melalui pangkalan data, model, hubungan, strategi dan fungsi perisian tengah Laravel, kami boleh melaksanakan kawalan akses berasaskan peranan dengan mudah. Di atas ialah langkah terperinci dan contoh kod tentang cara melaksanakan kawalan akses berasaskan peranan dalam Laravel. Saya harap artikel ini dapat membantu anda lebih memahami dan menggunakan fungsi kawalan akses Laravel.

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

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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Skop pembolehubah PHP dijelaskan
1 bulan yang lalu By 百草
Mengulas kod dalam php
4 minggu yang lalu By 百草
Petua untuk menulis komen php
4 minggu yang lalu By 百草

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1510
276
Bagaimana untuk melaksanakan sistem rujukan di Laravel? Bagaimana untuk melaksanakan sistem rujukan di Laravel? Aug 02, 2025 am 06:55 AM

Buat jadual rujukan untuk merekodkan hubungan cadangan, termasuk rujukan, rujukan, kod cadangan dan masa penggunaan; 2. Tentukan hubungan dan hubungan hasmany dalam model pengguna untuk menguruskan data cadangan; 3. Menjana kod cadangan yang unik semasa mendaftar (boleh dilaksanakan melalui peristiwa model); 4. Menangkap kod cadangan dengan menanyakan parameter semasa pendaftaran, mewujudkan hubungan cadangan selepas pengesahan dan mencegah penyimpanan diri; 5. mencetuskan mekanisme ganjaran apabila pengguna yang disyorkan melengkapkan tingkah laku yang ditentukan (urutan langganan); 6. Menjana pautan cadangan yang boleh dikongsi, dan gunakan URL tandatangan Laravel untuk meningkatkan keselamatan; 7. Statistik cadangan paparan di papan pemuka, seperti jumlah cadangan dan nombor yang ditukar; Adalah perlu untuk memastikan kekangan pangkalan data, sesi atau kuki berterusan,

Bagaimana untuk menjalankan projek Laravel? Bagaimana untuk menjalankan projek Laravel? Jul 28, 2025 am 04:28 AM

Checkphp> = 8.1, komposer, dan webserver; 2.cloneorcreateprojectandruncomposerinstall; 3.copy.env.exampleto.envandrunphpartimbeykey : menjana; 4.SetDataBaseSecredentientsin.envandrunphpartisanmigrate-Seed; 5.StartServerWithPhpartisanserve; 6.OptionallyRunnpmins

Bagaimana cara membiakkan pangkalan data di Laravel? Bagaimana cara membiakkan pangkalan data di Laravel? Jul 28, 2025 am 04:23 AM

Buat Fail Seeder: Gunakan PhPartisanMake: SeederSerseeder untuk menghasilkan kelas Seeder, dan masukkan data melalui kilang model atau pertanyaan pangkalan data dalam kaedah RUN; 2. Panggil penyokong lain dalam DatabaseSeeder: Daftar Usereeder, Postseeder, dan lain-lain. Sehingga melalui $ this-> call () untuk memastikan kebergantungan adalah betul; 3. Jalankan Seeder: Jalankan PhPartisandb: Benih untuk menjalankan semua Seeders berdaftar, atau gunakan PhPartisanMigrate: segar-Seed untuk menetapkan semula dan mengisi semula data; 4

Bagaimana untuk melaksanakan bendera ciri dalam aplikasi Laravel? Bagaimana untuk melaksanakan bendera ciri dalam aplikasi Laravel? Jul 30, 2025 am 01:45 AM

ChooseafeatureFlagstrategySuchasconfig-berasaskan, didorong oleh pangkalan data, orthird-partytoolslikeFlagsmith.2.setupadatabase-drivensystembycreatingamigrationforafeature_flagstableWithname, didayakan, andrulesfreate.3

Bagaimana membina API REST dengan Laravel? Bagaimana membina API REST dengan Laravel? Jul 30, 2025 am 03:41 AM

Buat projek Laravel baru dan mulakan perkhidmatan; 2. Menjana model, penghijrahan dan pengawal dan jalankan penghijrahan; 3. Tentukan laluan RESTful dalam Laluan/API.PHP; 4. Melaksanakan kaedah tambahan, penghapusan, pengubahsuaian dan pertanyaan dalam postcontroller dan mengembalikan respons JSON; 5. Gunakan postman atau curl untuk menguji fungsi API; 6. Pilihan menambah pengesahan API melalui Sanctum; Akhirnya dapatkan struktur yang jelas, Laravelrestapi yang lengkap dan boleh diperpanjang, sesuai untuk aplikasi praktikal.

Apakah Orm Fasih di Laravel? Apakah Orm Fasih di Laravel? Jul 29, 2025 am 03:50 AM

Eloquentorm adalah sistem pemetaan relasi objek terbina dalam Laravel. Ia mengendalikan pangkalan data melalui sintaks PHP dan bukannya SQL asli, menjadikan kod lebih ringkas dan mudah dikekalkan; 1. Setiap jadual data sepadan dengan kelas model, dan setiap rekod wujud sebagai contoh model; 2. Mengamalkan mod rekod aktif, dan contoh model boleh disimpan atau dikemas kini dengan sendirinya; 3. Penyerahan batch sokongan, dan atribut yang boleh diisi $ perlu ditakrifkan dalam model untuk memastikan keselamatan; 4. Memberi sokongan hubungan yang kuat, seperti satu-satu, satu-ke-banyak, banyak-banyak, dan lain-lain, dan anda boleh mengakses data yang berkaitan melalui panggilan kaedah; 5. Pembina pertanyaan bersepadu, di mana, Orderby dan kaedah lain boleh dipanggil dirantai untuk membina pertanyaan; 6. Aksesor sokongan dan pengubahsuaian, yang boleh memformat nombor apabila memperoleh atau menetapkan atribut.

Apakah kontrak repositori di Laravel? Apakah kontrak repositori di Laravel? Aug 03, 2025 am 12:10 AM

Corak repositori adalah corak reka bentuk yang digunakan untuk memusnahkan logik perniagaan dari logik akses data. 1. Ia mentakrifkan kaedah akses data melalui antara muka (kontrak); 2. Operasi khusus dilaksanakan oleh kelas repositori; 3. Pengawal menggunakan antara muka melalui suntikan ketergantungan, dan tidak terus menghubungi sumber data; 4. Kelebihan termasuk kod kemas, kesesuaian yang kuat, penyelenggaraan mudah dan kerjasama pasukan; 5. Berkenaan dengan projek sederhana dan besar, projek kecil boleh menggunakan model secara langsung.

Apa yang dimuatkan di Laravel? Apa yang dimuatkan di Laravel? Jul 27, 2025 am 04:14 AM

Eagerloadingpreventsthen 1queryprobylyloadingrelationshipsupfront.Then 1problemoccurswhen1queryfetchesrecords (cth., 100posts) danNadditionalqueriesFetchRelatedData (mis

See all articles