Rumah  >  Artikel  >  rangka kerja php  >  Ciri lanjutan fungsi kebenaran Laravel: cara melaksanakan kawalan kebenaran berbilang dimensi

Ciri lanjutan fungsi kebenaran Laravel: cara melaksanakan kawalan kebenaran berbilang dimensi

PHPz
PHPzasal
2023-11-03 15:32:071211semak imbas

Ciri lanjutan fungsi kebenaran Laravel: cara melaksanakan kawalan kebenaran berbilang dimensi

Ciri lanjutan fungsi kebenaran Laravel: Cara melaksanakan kawalan kebenaran berbilang dimensi memerlukan contoh kod khusus

Pengenalan:

Apabila kerumitan perniagaan meningkat, kawalan kebenaran memainkan peranan penting dalam aplikasi web . Laravel, sebagai rangka kerja PHP yang popular, memberikan kami fungsi kebenaran yang berkuasa dan fleksibel. Selain peranan asas dan pengurusan kebenaran, Laravel juga menyokong kawalan kebenaran berbilang dimensi, yang membenarkan kawalan kebenaran terperinci berdasarkan pengguna, peranan, sumber dan operasi. Artikel ini akan memperkenalkan cara menggunakan Laravel untuk melaksanakan kawalan kebenaran berbilang dimensi dan memberikan contoh kod khusus.

1. Pengguna dan peranan
Dalam Laravel, pengguna dan peranan adalah asas kawalan kebenaran. Kami boleh mencipta pengguna dan peranan melalui sistem pengesahan pengguna Laravel sendiri, atau kami boleh menyesuaikan model pengguna dan model peranan.

Pertama, kita perlu mencipta jadual pengguna. Anda boleh menggunakan sistem pengesahan pengguna Laravel sendiri dan laksanakan arahan berikut untuk menjana fail migrasi:

php artisan make:auth

Laksanakan migrasi:

php artisan migrate

Kemudian, kita perlu mencipta jadual peranan. Anda boleh melaksanakan perintah berikut untuk menjana fail migrasi:

php artisan make:migration create_roles_table --create=roles

Dalam fail migrasi yang dijana, kami menambah medan yang sepadan, seperti: nama, nama_pameran dan perihalan. Kemudian lakukan migrasi:

php artisan migrate

Seterusnya, kita perlu membuat perkaitan dalam model pengguna dan model peranan. Takrifkan kaedah roles() dalam model pengguna:

public function roles()
{
    return $this->belongsToMany('AppRole');
}

Takrifkan kaedah users() dalam model peranan:

public function users()
{
    return $this->belongsToMany('AppUser');
}

Melalui langkah di atas, kami telah mewujudkan hubungan antara pengguna dan peranan.

2. Sumber dan operasi
Dalam kawalan kebenaran berbilang dimensi, sumber dan operasi digunakan untuk menerangkan skop kebenaran yang perlu kita kawal. Dalam Laravel, kita boleh menggunakan dasar untuk menentukan sumber dan operasi.

Pertama, kita perlu membuat kelas strategi. Anda boleh melaksanakan perintah berikut untuk menjana kelas dasar:

php artisan make:policy PostPolicy --model=Post

Di sini, mengambil model sumber sebagai Pos sebagai contoh, kelas dasar bernama PostPolicy dijana.

Dalam kelas dasar, kami boleh menentukan kaedah kebenaran biasa, seperti lihat, cipta, kemas kini dan padam. Contohnya, untuk mengawal sama ada pengguna boleh melihat siaran:

public function view(User $user, Post $post)
{
    // 可以根据$user和$post的属性进行自定义权限控制
    return $user->id === $post->user_id;
}

Kami juga boleh menentukan tingkah laku lalai kaedah kebenaran, iaitu, apabila tiada kaedah kebenaran ditentukan untuk operasi, Laravel akan memanggil kaedah before dasar kelas. Contohnya, untuk menyekat semua pengguna daripada log masuk semasa memadamkan siaran:

public function before(User $user)
{
    if ($user->isAdmin()) {
        return true; // 管理员拥有所有权限
    }
}

Dengan langkah di atas, kami telah mencipta dasar untuk sumber dan tindakan.

3. Kawalan kebenaran berbilang dimensi
Dengan perhubungan antara pengguna dan peranan, serta strategi sumber dan operasi, kami boleh mencapai kawalan kebenaran berbilang dimensi.

Pertama, kita perlu mengaitkan strategi dalam model peranan. Anda boleh menambah kaedah polisi() dalam model peranan:

public function policies()
{
    return $this->belongsToMany('AppPolicy');
}

Kemudian, kaitkan peranan dalam model dasar. Anda boleh menambah kaedah roles() pada model dasar:

public function roles()
{
    return $this->belongsToMany('AppRole');
}

Seterusnya, kami boleh melakukan pengesahan kebenaran dalam pengawal atau laluan. Contohnya, untuk menyemak sama ada pengguna mempunyai kebenaran untuk mengedit siaran:

if ($user->can('update', $post)) {
    // 用户有权编辑帖子,继续执行
} else {
    // 用户无权编辑帖子,返回错误页面
}

Dalam contoh ini, kaedah boleh mengesahkan kebenaran berdasarkan pengguna, dasar dan sumber. Laravel akan mencari peranan pengguna dan dasar peranan secara automatik, kemudian memanggil kaedah kebenaran yang sepadan dalam dasar untuk menentukan kebenaran.

4. Contoh Kod
Contoh kod lengkap diberikan di bawah untuk mencapai kawalan kebenaran berbilang dimensi.

Mula-mula, cipta model bernama Role, dan tentukan kaedah roles di dalamnya:

class Role extends Model
{
    public function policies()
    {
        return $this->belongsToMany('AppPolicy');
    }

    public function users()
    {
        return $this->belongsToMany('AppUser');
    }
}

Kemudian, buat model bernama Policy, dan tentukan kaedah polisi di dalamnya:

class Policy extends Model
{
    public function roles()
    {
        return $this->belongsToMany('AppRole');
    }
}

Seterusnya, kita boleh menambahkannya pada controller Perform pengesahan kebenaran dalam:

class PostController extends Controller
{
    public function update(Request $request, Post $post)
    {
        $this->authorize('update', $post);

        // 继续执行更新操作
    }
}

Dalam contoh ini, kami menggunakan kaedah kebenaran untuk melaksanakan pengesahan kebenaran. Laravel akan mencari dasar yang sepadan secara automatik berdasarkan pengguna dan sumber, dan memanggil kaedah kebenaran yang sepadan dalam dasar.

Kesimpulan:

Fungsi kebenaran Laravel menyediakan kawalan kebenaran berbilang dimensi yang fleksibel dan berkuasa, yang boleh memenuhi pelbagai keperluan perniagaan yang kompleks. Melalui dasar perkaitan pengguna dan peranan, sumber dan operasi, kami boleh mencapai kawalan kebenaran berbilang dimensi yang terperinci. Saya harap artikel ini dapat membantu pembaca memahami dan menggunakan fungsi kebenaran Laravel serta meningkatkan keselamatan dan kebolehselenggaraan aplikasi web.

Atas ialah kandungan terperinci Ciri lanjutan fungsi kebenaran Laravel: cara melaksanakan kawalan kebenaran berbilang dimensi. 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