Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana untuk melaksanakan sistem pengurusan kebenaran dalam Laravel

Bagaimana untuk melaksanakan sistem pengurusan kebenaran dalam Laravel

WBOY
WBOYasal
2023-11-02 16:51:331053semak imbas

Bagaimana untuk melaksanakan sistem pengurusan kebenaran dalam Laravel

Cara melaksanakan sistem pengurusan kebenaran dalam Laravel

Pengenalan:
Dengan pembangunan aplikasi web yang berterusan, sistem pengurusan kebenaran telah menjadi salah satu fungsi asas bagi banyak aplikasi. Laravel, sebagai rangka kerja PHP yang popular, menyediakan pelbagai alatan dan fungsi untuk melaksanakan sistem pengurusan kebenaran. Artikel ini akan memperkenalkan cara untuk melaksanakan sistem pengurusan kebenaran yang mudah dan berkuasa dalam Laravel dan memberikan contoh kod khusus.

1. Idea Reka Bentuk Sistem Pengurusan Kebenaran
Apabila mereka bentuk sistem pengurusan kebenaran, anda perlu mempertimbangkan perkara penting berikut:

  1. Definisi peranan dan kebenaran: Peranan merujuk kepada fungsi atau identiti pengguna, dan kebenaran merujuk kepada kawalan pengguna ke atas sistem Akses kepada fungsi atau sumber.
  2. Hubungan antara pengguna dan peranan: Pengguna boleh mempunyai berbilang peranan dan peranan boleh dimiliki oleh berbilang pengguna.
  3. Hubungan antara kebenaran dan peranan: Peranan boleh mempunyai berbilang kebenaran dan satu kebenaran boleh dimiliki oleh berbilang peranan.
  4. Hubungan antara penghalaan dan kebenaran: Penghalaan menentukan laluan masuk untuk pengguna mengakses fungsi sistem. Laluan yang berbeza mungkin memerlukan kebenaran yang berbeza untuk menyekat akses.

Berdasarkan idea reka bentuk di atas, kita boleh mula melaksanakan sistem pengurusan kebenaran dalam Laravel.

2. Reka bentuk dan migrasi pangkalan data
Dalam Laravel, kami boleh menggunakan migrasi pangkalan data untuk mencipta dan mengubah suai jadual pangkalan data. Berikut ialah reka bentuk pangkalan data yang ringkas:

  1. Jadual pengguna (pengguna): menyimpan maklumat asas pengguna, seperti nama pengguna, kata laluan, dsb.
  2. Jadual peranan (peranan): Menyimpan maklumat asas peranan, seperti nama peranan, perihalan, dsb.
  3. Jadual kebenaran: menyimpan maklumat asas tentang kebenaran, seperti nama kebenaran, perihalan, dsb.
  4. Jadual persatuan kebenaran peranan (permission_permission): merekodkan hubungan yang sepadan antara peranan dan kebenaran.
  5. Jadual perkaitan peranan pengguna (peranan_pengguna): merekodkan perhubungan yang sepadan antara pengguna dan peranan.

Mula-mula, buat fail migrasi:

php artisan make:migration create_users_table
php artisan make:migration create_roles_table
php artisan make:migration create_permissions_table
php artisan make:migration create_role_permission_table
php artisan make:migration create_user_role_table

Kemudian, tulis struktur jadual dalam fail migrasi yang sepadan (kod ditinggalkan), dan jalankan arahan migrasi:

php artisan migrate

Tiga Tentukan hubungan model
Dalam Laravel. kami Anda boleh menggunakan model Eloquent untuk menentukan hubungan antara jadual pangkalan data. Pertama, kita perlu menentukan tiga model: Pengguna, Peranan dan Kebenaran.

  1. Model pengguna (Pengguna)

    namespace App;
    
    use IlluminateDatabaseEloquentModel;
    
    class User extends Model
    {
     // 用户与角色的多对多关系
     public function roles()
     {
         return $this->belongsToMany('AppRole')->withTimestamps();
     }
    
     // 判断用户是否拥有某个角色
     public function hasRole($role)
     {
         if (is_string($role)) {
             return $this->roles->contains('name', $role);
         }
    
         return !! $role->intersect($this->roles)->count();
     }
    
     // 判断用户是否拥有某个权限
     public function hasPermission($permission)
     {
         return $this->hasRole($permission->roles);
     }
    }
  2. Role model (Role)

    namespace App;
    
    use IlluminateDatabaseEloquentModel;
    
    class Role extends Model
    {
     // 角色与用户的多对多关系
     public function users()
     {
         return $this->belongsToMany('AppUser')->withTimestamps();
     }
    
     // 角色与权限的多对多关系
     public function permissions()
     {
         return $this->belongsToMany('AppPermission')->withTimestamps();
     }
    
     // 判断角色是否拥有某个权限
     public function hasPermission($permission)
     {
         if (is_string($permission)) {
             return $this->permissions->contains('name', $permission);
         }
    
         return !! $permission->intersect($this->permissions)->count();
     }
    }
  3. Model kebenaran (Kebenaran)

    namespace App;
    
    use IlluminateDatabaseEloquentModel;
    
    class Permission extends Model
    {
     // 权限与角色的多对多关系
     public function roles()
     {
         return $this->belongsToMany('AppRole');
     }
    }
kita boleh Gunakan middleware untuk memintas dan mengesahkan permintaan akses pengguna. Pertama, kita perlu menentukan perisian tengah kebenaran.


    Takrifkan middleware kebenaran:
  1. namespace AppHttpMiddleware;
    
    use Closure;
    use IlluminateSupportFacadesAuth;
    
    class CheckPermission
    {
     public function handle($request, Closure $next, $permission)
     {
         $user = Auth::user();
         
         if ($user && $user->hasPermission($permission)) {
             return $next($request);
         }
         
         return redirect()->route('403'); // 没有权限则跳转到403页面
     }
    }

  2. Daftar perisian tengah kebenaran:
  3. Daftar perisian tengah kebenaran dalam tatasusunan $routeMiddleware dalam appHttpKernel.php

    reeee:
    Kaitkan middleware dan penghalaan: appHttpKernel.php中的$routeMiddleware数组中注册权限中间件:

    protected $routeMiddleware = [
     // ...
     'permission' => AppHttpMiddlewareCheckPermission::class,
    ];
  4. 关联中间件与路由:
    routesweb.php中定义需要权限控制的路由,并使用permissionTentukan laluan yang memerlukan kawalan kebenaran dalam routesweb.php dan gunakan permission middleware:

    Route::get('/members', 'MemberController@index')->middleware('permission:member_view');

5. anda boleh menggunakan contoh kod berikut untuk mengesahkan identiti pengguna dan mengembalikan paparan yang sepadan berdasarkan kebenaran.

  1. Kaedah dalam pengawal:

    namespace AppHttpControllers;
    
    use IlluminateSupportFacadesAuth;
    
    class MemberController extends Controller
    {
     public function index()
     {
        if (Auth::user()->hasPermission('member_view')) {
             return view('members.index');
        }
        
        // 没有权限则跳转到403页面
        return redirect()->route('403');
     }
    }

  2. Kod dalam paparan:

    @if(Auth::user()->hasPermission('member_view'))
     <!-- 具有查看成员的权限,显示相关内容 -->
     <table>
         ...
     </table>
    @else
     <!-- 没有权限,显示无权限提示 -->
     <div>您没有查看成员的权限</div>
    @endif

6. Ringkasan

Melalui langkah di atas, kami berjaya melaksanakan sistem pengurusan kebenaran yang mudah dan berkuasa dalam Laravel Dengan mentakrifkan peranan, kebenaran dan perhubungan yang sepadan, menggunakan perisian tengah untuk memintas laluan, dan menilai kebenaran dalam pengawal dan pandangan, kami boleh mencapai kawalan yang tepat ke atas kebenaran akses pengguna. Saya harap artikel ini dapat membantu anda lebih memahami dan menggunakan fungsi pengurusan kebenaran dalam Laravel.

Rujukan:

    Dokumentasi rasmi Laravel (https://laravel.com/docs/8.x/)
  • Tutorial siri Laravel Beyond CRUD: Pengurusan kebenaran (https://laravelbestpractices.com/series/show/ laravel -beyond-crud/episod/9)

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan sistem pengurusan kebenaran dalam Laravel. 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