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.
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';name
Kita boleh guna apa ThinkPHP menyediakan alat migrasi Pangkalan Data untuk mencipta jadual: php think migrate:run. description
Buat model peranan dan kebenaran id
{
protected $table = 'role';
}
gunakan thinkModel;
{
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
(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_id
role_id
< ?php
model aplikasi ruang nama;permission_id
permission_id
gunakan thinkModel;
{
protected $table = 'role'; public function permissions() { return $this->belongsToMany( Permission::class, 'role_permission', 'role_id', 'permission_id' ); }
}
model aplikasi ruang nama;
gunakan thinkModel;
{
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;
{
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 middlewarekembali [
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.
{
// ... 'check_auth' => appmiddlewareCheckAuth::class,
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!