Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan ThinkPHP6 untuk melaksanakan pengurusan kebenaran peranan pengguna

Cara menggunakan ThinkPHP6 untuk melaksanakan pengurusan kebenaran peranan pengguna

WBOY
WBOYasal
2023-06-20 22:06:271445semak imbas

Dengan perkembangan perniagaan yang berterusan, banyak syarikat kecil dan sederhana mempunyai sistem penyelenggaraan pengguna mereka sendiri, dan pengurusan hak pengguna merupakan bahagian penting daripadanya. Untuk melindungi maklumat sensitif dalam sistem dan memastikan operasi normal perniagaan, kami perlu menggunakan mekanisme pengurusan kebenaran peranan untuk memastikan pengguna dalam peranan yang berbeza hanya boleh mengakses sumber dan data yang ditetapkan.

Artikel ini akan mengambil rangka kerja ThinkPHP6 sebagai contoh untuk memperkenalkan cara menggunakan perisian tengah kawalan kebenaran dan pakej sambungan yang disediakannya untuk melaksanakan pengurusan kebenaran peranan pengguna.

  1. Buat jadual peranan dan jadual kebenaran

Mula-mula kita perlu menentukan dua jadual pangkalan data, satu jadual peranan, digunakan untuk menyimpan maklumat peranan sistem; jadual kebenaran , digunakan untuk menyimpan maklumat kebenaran sistem.

BUAT JADUAL role (
id int(11) BUKAN NULL AUTO_INCREMENT ULASAN 'kunci utama',
name varchar(20) BUKAN NULL ULASAN 'nama peranan', BUAT JADUAL
(description
int(11) BUKAN NULL AUTO_INNCREMENT ULASAN 'kunci utama',id
varchar(20) BUKAN NULL ULASAN 'nama kebenaran',

varchar( 50) NOT NULL COMMENT 'Permission Description',permission PRIMARY KUNCI (
)id) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Permission Table';
nameKita boleh guna apa ThinkPHP menyediakan alat migrasi Pangkalan Data untuk mencipta jadual: php think migrate:run.
description
Buat model peranan dan kebenaran id

Seterusnya, kita perlu mencipta model peranan dan kebenaran. Cipta fail Role.php dan Permission.php dalam direktori app/model Kodnya adalah seperti berikut:

namespace appmodel;
  • gunakan thinkModel; Peranan kelas memanjangkan Model

    {

    protected $table = 'role';

    }

    model aplikasi ruang nama;

    gunakan thinkModel;

    Kebenaran kelas memanjangkan Model

    {

    protected $table = 'permission';

    }

    Buat jadual persatuan peranan dan kebenaran


    Memandangkan pengguna mungkin mempunyai berbilang peranan, a peranan juga mungkin Sepadan dengan berbilang kebenaran, jadi kita perlu membuat jadual perkaitan peranan dan kebenaran. Buat jadual role_permission dalam pangkalan data.

    BUAT JADUAL

    (
    1. int(11) NOT NULL AUTO_INNCREMENT ULASAN 'primary key',
    int(11) NOT NULL ULASAN 'role ID',

    int(11) BUKAN NULL KOMEN 'ID Kebenaran',

    KUNCI UTAMA (role_permission),
    KUNCI id (
    ),role_id KUNCI
    (permission_id)
    ) ENGINE=CHARSET LAALA InnoDB=utf8mb4 KOMEN='Jadual perkaitan kebenaran peranan';id
    Tentukan perhubungan banyak-ke-banyak antara peranan dan kebenaran dalam model: role_idrole_id< ?php
    model aplikasi ruang nama;permission_idpermission_idgunakan thinkModel;

    Peranan kelas meluaskan Model

    {

    protected $table = 'role';
    
    public function permissions()
    {
        return $this->belongsToMany(
            Permission::class,
            'role_permission',
            'role_id',
            'permission_id'
        );
    }

    }

    < ;?php

    model aplikasi ruang nama;

    gunakan thinkModel;

    Kebenaran kelas melanjutkan Model

    {

    protected $table = 'permission';
    
    public function roles()
    {
        return $this->belongsToMany(
            Role::class,
            'role_permission',
            'permission_id',
            'role_id'
        );
    }

    }

    Tentukan middleware


    Dalam ThinkPHP6, middleware ialah alat yang berkuasa untuk memproses permintaan Kami boleh melaksanakan kawalan kebenaran melalui middleware. Buat perisian tengah CheckAuth untuk menentukan sama ada pengguna mempunyai kebenaran untuk melaksanakan operasi semasa. Cipta fail CheckAuth.php dalam direktori appmiddleware dengan kod berikut:

    namespace appmiddleware;

    1. gunakan think acadeDb;
    2. gunakan think acadeSession;
    gunakan think acadeConfig;

    class CheckAuth

    {

    public function handle($request, Closure $next)
    {
        if (Session::has('user')) {
            $roles = Db::table('user')
                ->alias('u')
                ->leftJoin('role_user ru', 'u.id = ru.user_id')
                ->leftJoin('role r', 'ru.role_id = r.id')
                ->where('u.id', '=', Session::get('user')->id)
                ->field('r.id')
                ->select();
            $permissions = Config::get('permissions');
            foreach ($roles as $role) {
                $rolePermissions = Db::table('role_permission')
                    ->where('role_id', '=', $role->id)
                    ->field('permission_id')
                    ->select();
                foreach ($rolePermissions as $rolePermission) {
                    if (in_array($rolePermission->permission_id, $permissions)) {
                        return $next($request);
                    }
                }
            }
        }
        abort(403, '没有权限');
    }

    }


    Perisian tengah ini terlebih dahulu akan menanyakan semua peranan yang dimiliki oleh pengguna semasa semasa merentasi peranan, pertanyaan setiap Jika kebenaran yang dimiliki oleh peranan sepadan dengan permintaan semasa, pelaksanaan akan dibenarkan diteruskan, jika tidak, ralat 403 akan dikembalikan.

    Buat fail konfigurasi kebenaran

    Untuk memudahkan pengurusan kebenaran sistem, kami boleh menggunakan fungsi Config yang disediakan oleh ThinkPHP untuk menulis semua kebenaran ke dalam fail konfigurasi. Cipta fail permissions.php dalam direktori konfigurasi. kunci/nilai Untuk merekodkan semua kebenaran sistem, kunci ialah integer dan nilai ialah rentetan, yang menunjukkan nama kebenaran.

    Memohon middleware
    1. Akhir sekali, kita perlu benar-benar menggunakan middleware di atas. Buka fail middleware.php dalam direktori konfigurasi dan tambah perisian tengah CheckAuth.

    kembali [

    1 => 'user.create',
    2 => 'user.read',
    3 => 'user.update',
    4 => 'user.delete',

    ];

    Tertib aplikasi middleware dilaksanakan dari hadapan ke belakang mengikut nama kunci tatasusunan. Kita boleh Laraskan susunan pelaksanaan middleware melalui subskrip tatasusunan.

    Pada pengawal atau kaedah yang memerlukan kawalan kebenaran, anda boleh menggunakan kaedah middleware untuk mengikat middleware CheckAuth.

      pengawal aplikasi ruang nama;
    gunakan think acadeView;

    kelas UserController

    {

    // ...
    'check_auth' => appmiddlewareCheckAuth::class,

    }

    Pada ketika ini, kami telah menyelesaikan semua langkah untuk melaksanakan pengurusan kebenaran peranan pengguna menggunakan ThinkPHP6 Anda boleh mengembangkan dan menambah baik kod sampel di atas mengikut keperluan perniagaan sebenar.

    Atas ialah kandungan terperinci Cara menggunakan ThinkPHP6 untuk melaksanakan pengurusan kebenaran peranan pengguna. 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