Rumah  >  Artikel  >  rangka kerja php  >  Cadangan pengoptimuman untuk fungsi kebenaran Laravel: Cara meningkatkan prestasi dan kelajuan tindak balas pengesahan kebenaran

Cadangan pengoptimuman untuk fungsi kebenaran Laravel: Cara meningkatkan prestasi dan kelajuan tindak balas pengesahan kebenaran

WBOY
WBOYasal
2023-11-02 16:28:491205semak imbas

Cadangan pengoptimuman untuk fungsi kebenaran Laravel: Cara meningkatkan prestasi dan kelajuan tindak balas pengesahan kebenaran

Laravel ialah rangka kerja PHP yang berkuasa dengan keupayaan pengurusan kebenaran fleksibel yang boleh menyediakan keselamatan untuk tapak web dan aplikasi. Walau bagaimanapun, dalam beberapa sistem yang lebih kompleks, pengesahan kebenaran mungkin menjadi hambatan prestasi, menjejaskan kelajuan tindak balas sistem dan pengalaman pengguna. Artikel ini akan memperkenalkan anda kepada beberapa kaedah untuk mengoptimumkan fungsi pengesahan kebenaran Laravel untuk meningkatkan prestasi sistem dan kelajuan tindak balas, serta menyediakan contoh kod khusus.

Pengoptimuman 1: Gunakan caching

Laravel menyediakan mekanisme caching yang boleh cache hasil operasi perlahan supaya data boleh diperolehi dengan cepat. Untuk fungsi pengesahan kebenaran, kita boleh menggunakan mekanisme caching Laravel untuk cache data kebenaran, maklumat pengguna dan data lain yang biasa digunakan untuk meningkatkan kelajuan pengesahan.

Contoh kod menggunakan mekanisme cache Laravel untuk pengesahan kebenaran:

$userPermissions = Cache::remember('user_permissions_'.$userId, 3600, function() use($userId) {
    // 获取用户对应的权限信息
    return User::find($userId)->permissions;
});
if(in_array('admin', $userPermissions)){
    //用户拥有admin权限
}

Dalam contoh di atas, kami menggunakan kaedah Cache::ingat untuk cache data, di mana parameter pertama ialah nama kunci cache, dan parameter kedua ialah cache. masa tamat tempoh (di sini ditetapkan kepada 1 jam), parameter ketiga ialah fungsi panggil balik untuk mendapatkan data, jika cache tidak wujud, fungsi panggil balik akan dilaksanakan dan ditulis ke cache.

Menggunakan cache boleh mengelakkan pertanyaan pangkalan data yang kerap, meningkatkan kelajuan tindak balas dan mengoptimumkan fungsi pengesahan kebenaran Laravel dengan berkesan.

Pengoptimuman 2: Gunakan persatuan polimorfik

Perkaitan polimorfik boleh mengaitkan pelbagai jenis model melalui jadual Persatuan boleh ditambah, dipadam dan diubah suai pada bila-bila masa yang diperlukan, yang meningkatkan kefleksibelan dan kebolehskalaan sistem. Dalam fungsi pengesahan kebenaran, kita boleh menggunakan perhubungan persatuan polimorfik untuk mewujudkan perhubungan antara pengguna, peranan dan kebenaran, menjadikan pengesahan lebih pintar dan cekap.

Berikut ialah contoh kod menggunakan perkaitan polimorfik Laravel untuk pengesahan kebenaran:

1 Tentukan model:

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class User extends Model
{
    public function permissions()
    {
        return $this->morphToMany('AppPermission', 'permissionable');
    }
}

class Role extends Model
{
    public function permissions()
    {
        return $this->morphToMany('AppPermission', 'permissionable');
    }
}

class Permission extends Model
{
    public function users()
    {
        return $this->morphedByMany('AppUser', 'permissionable');
    }

    public function roles()
    {
        return $this->morphedByMany('AppRole', 'permissionable');
    }
}

2 Gunakan perkaitan polimorfik untuk pengesahan:

$user = User::find($userId);
$userPermissions = $user->permissions;

if($userPermissions->contains('name', 'admin')){
    //用户拥有admin权限
}

Dalam contoh di atas, kami mentakrifkan tiga Model. , peranan dan kebenaran masing-masing Dalam model kebenaran, kami menggunakan kaedah morphedByMany untuk mewujudkan hubungan polimorfik supaya kedua-dua pengguna dan peranan boleh dikaitkan dengan kebenaran. Apabila menggunakan perkaitan polimorfik untuk pengesahan, kami boleh mengakses atribut kebenaran pengguna atau peranan secara langsung, mendapatkan keseluruhan senarai kebenarannya dan membuat pertimbangan mengikut keperluan.

Pengoptimuman 3: Optimumkan pernyataan pertanyaan

Laravel menyediakan pembina pertanyaan yang kaya yang boleh melakukan pertanyaan dan operasi data dengan mudah Walau bagaimanapun, jika pernyataan pertanyaan direka bentuk secara tidak betul, ia akan membawa kepada kecekapan pertanyaan yang rendah dan menjejaskan kelajuan tindak balas sistem. . Dalam fungsi pengesahan kebenaran, kami boleh meningkatkan kecekapan pertanyaan dengan mengoptimumkan pernyataan pertanyaan, dengan itu meningkatkan prestasi sistem.

Berikut ialah contoh kod untuk mengoptimumkan pernyataan pertanyaan:

$user = User::find($userId);
//获取用户对应的所有角色
$rolesRawSql = "SELECT r.* FROM roles r, role_user ru WHERE r.id = ru.role_id AND ru.user_id = ?";
$userRoles = DB::select($rolesRawSql, [$user->id]);
$roleIds = collect($userRoles)->pluck('id')->toArray();

//获取所有角色对应的权限
$permissionsRawSql = "SELECT p.* FROM permissions p, permission_role pr WHERE p.id = pr.permission_id AND pr.role_id IN (".implode(',', array_fill(0, count($roleIds), '?')).")";
$rolePermissions = DB::select($permissionsRawSql, $roleIds);
$permissionNames = collect($rolePermissions)->pluck('name')->toArray();

if(in_array('admin', $permissionNames)){
    //用户拥有admin权限
}

Dalam contoh di atas, kami menanyakan data melalui pernyataan SQL asli Terutama untuk data yang mengandungi pertanyaan berkaitan berbilang peringkat, anda boleh mengelak daripada menggunakan pertanyaan yang disediakan oleh Laravel Builder untuk meningkatkan kelajuan pertanyaan.

Pengoptimuman 4: Gunakan cache dan persatuan polimorfik untuk menggabungkan

Menggabungkan cache dan persatuan polimorfik boleh mengoptimumkan lagi fungsi pengesahan kebenaran dan meningkatkan prestasi sistem dan kelajuan tindak balas. Kami boleh menyimpan data kebenaran dan menggunakan perhubungan polimorfik untuk mewujudkan perkaitan antara pengguna, peranan dan kebenaran untuk mencapai pengesahan kebenaran yang cekap.

Berikut ialah contoh kod menggunakan cache dan perkaitan polimorfik untuk pengesahan kebenaran:

1 Tentukan model kebenaran:

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Permission extends Model
{
    public function roles()
    {
        return $this->morphedByMany('AppRole', 'permissionable');
    }

    public function users()
    {
        return $this->morphedByMany('AppUser', 'permissionable');
    }

    /**
     * 获取缓存中的权限数据
     *
     * @return mixed
     */
    public static function allPermissions()
    {
        return Cache::rememberForever('permissions', function () {
            return Permission::all();
        });
    }
}

2 Gunakan cache dan perkaitan polimorfik untuk pengesahan:

$user = User::find($userId);
$userPermissions = $user->permissions;
$allPermissions = Permission::allPermissions();

foreach($userPermissions as $permission){
    if($allPermissions->contains('id', $permission->id) && $allPermissions->where('id', $permission->id)->first()->name === 'admin'){
        //用户拥有admin权限
    }
}

Dalam contoh di atas, kami mentakrifkan. kaedah allPermissions dalam model Permission untuk mendapatkan data kebenaran dalam cache Jika cache tidak wujud, ia diperoleh daripada pangkalan data dan ditulis ke cache. Apabila melakukan pengesahan kebenaran, kami boleh mendapatkan senarai kebenaran pengguna dahulu, dan kemudian menggunakan gelung untuk menentukan satu demi satu sama ada nama kebenaran adalah pentadbir. Jika ya, ini bermakna pengguna mempunyai kebenaran pentadbir.

Ringkasan

Artikel ini memperkenalkan empat kaedah untuk mengoptimumkan fungsi pengesahan kebenaran Laravel, termasuk menggunakan cache, menggunakan perhubungan polimorfik, mengoptimumkan pernyataan pertanyaan dan menggunakan gabungan cache dan perhubungan polimorfik. Kaedah ini boleh meningkatkan prestasi dan kelajuan tindak balas sistem dengan berkesan, dengan itu meningkatkan pengalaman pengguna. Dalam pembangunan sebenar, kita boleh memilih kaedah pengoptimuman yang sesuai berdasarkan keperluan sebenar dan ciri sistem, dan melaksanakannya dengan contoh kod tertentu.

Atas ialah kandungan terperinci Cadangan pengoptimuman untuk fungsi kebenaran Laravel: Cara meningkatkan prestasi dan kelajuan tindak balas pengesahan kebenaran. 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