ThinkPHP6 ialah rangka kerja PHP yang sangat baik yang memberikan kami banyak alatan dan fungsi yang cekap. Antaranya, kebenaran Pengesahan ialah fungsi yang sangat berkuasa yang boleh membantu kami mengurus kebenaran dalam aplikasi. Artikel ini akan memperkenalkan cara menggunakan kebenaran Pengesahan ThinkPHP6.
Mula-mula, kita perlu memasang komponen Auth. Jalankan arahan berikut dalam terminal:
composer require topthink/think-auth
Selepas pemasangan selesai, kita perlu menambah pembekal perkhidmatan Auth dalam fail konfigurasi:
// config/app.php return [ // ... 'providers' => [ // ... thinkuthServiceProvider::class, ], ];
Kemudian, kita perlu melaksanakan arahan berikut untuk menjana fail konfigurasi Auth:
php think auth:config
Auth component boleh dikonfigurasikan untuk mencapai keperluan pengurusan kebenaran yang berbeza Berikut ialah konfigurasi asas:
// config/auth.php return [ 'auth_on' => true, 'auth_type' => 1, 'auth_group' => 'auth_group', 'auth_group_access' => 'auth_group_access', 'auth_rule' => 'auth_rule', 'auth_user' => 'user', ];
// appmodelAuthRule.php namespace appmodel; use thinkModel; class AuthRule extends Model { // }
CREATE TABLE `auth_rule` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL COMMENT '规则', `title` VARCHAR(100) NOT NULL COMMENT '规则名称', `type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '规则类型', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态', `condition` TEXT COMMENT '规则表达式', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='权限规则表';
use appmodelAuthRule; $rule = new AuthRule; $rule->name = 'admin/user/index'; $rule->title = '管理用户'; $rule->save(); $rule = new AuthRule; $rule->name = 'admin/user/add'; $rule->title = '添加用户'; $rule->save(); $rule = new AuthRule; $rule->name = 'admin/user/edit'; $rule->title = '编辑用户'; $rule->save(); $rule = new AuthRule; $rule->name = 'admin/user/del'; $rule->title = '删除用户'; $rule->save();
Selain peraturan kebenaran, kami juga perlu membuat kumpulan pengguna. Kumpulan pengguna ialah koleksi pengguna yang mempunyai hak akses yang sama. Kita perlu mencipta jadual auth_group dalam pangkalan data, dan kemudian mencipta kumpulan pengguna dengan menambah rekod.
// appmodelAuthGroup.php namespace appmodel; use thinkModel; class AuthGroup extends Model { // }
CREATE TABLE `auth_group` ( `id` INT NOT NULL AUTO_INCREMENT, `title` VARCHAR(100) NOT NULL COMMENT '组名', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户组表';
use appmodelAuthGroup; $group = new AuthGroup; $group->title = '管理员'; $group->save(); $group = new AuthGroup; $group->title = '普通用户'; $group->save();
Kini, kami telah mencipta beberapa peraturan kebenaran dan kumpulan pengguna. Seterusnya, kita perlu menetapkan peraturan kepada kumpulan pengguna. Kita perlu mencipta jadual auth_group_access dalam pangkalan data, dan kemudian mencipta butiran kumpulan pengguna dengan menambah rekod.
// appmodelAuthGroupAccess.php namespace appmodel; use thinkModel; class AuthGroupAccess extends Model { // }
CREATE TABLE `auth_group_access` ( `uid` INT NOT NULL COMMENT '用户id', `group_id` INT NOT NULL COMMENT '用户组id', UNIQUE KEY `uid_group_id` (`uid`, `group_id`), KEY `uid` (`uid`), KEY `group_id` (`group_id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='用户组明细表';
use appmodelAuthGroupAccess; $access = new AuthGroupAccess; $access->uid = 1; $access->group_id = 1; $access->save(); $access = new AuthGroupAccess; $access->uid = 2; $access->group_id = 2; $access->save(); $access = new AuthGroupAccess; $access->uid = 3; $access->group_id = 2; $access->save();
Sekarang, kami telah mencipta beberapa peraturan kebenaran dan kumpulan pengguna dan memberikan peraturan kepada kumpulan pengguna. Seterusnya, kami boleh menggunakan kebenaran Pengesahan untuk mengesahkan sama ada pengguna mempunyai hak akses.
// 授权验证 use thinkacadeSession; use thinkacadeRequest; use thinkacadeConfig; use thinkacadeDb; use thinkuthAuth; class BaseController extends Controller { protected function initialize() { parent::initialize(); // 如果用户未登录,则跳转到登录页面 if (!Session::has('user')) { $this->redirect('/login'); } $uid = Session::get('user.id'); // 如果是超级管理员,则直接通过权限验证 if ($uid == Config::get('admin_id')) { return true; } $auth = new Auth; $route = strtolower(Request::controller() . '/' . Request::action()); if (!$auth->check($route, $uid)) { $this->error('无权限'); } } }
Jika tidak, kami mencipta tika Auth dan mendapatkan laluan untuk permintaan semasa. Kemudian, kami menggunakan kaedah semakan Auth untuk mengesahkan sama ada pengguna semasa mempunyai hak akses. Jika tidak, ralat tiada kebenaran dilemparkan.
RingkasanDalam artikel ini, kami mempelajari cara menggunakan kebenaran ThinkPHP6's Auth. Kami menggunakan komponen Auth untuk melaksanakan pengurusan kebenaran dan mencipta beberapa peraturan kebenaran dan kumpulan pengguna. Akhir sekali, kami menggunakan kebenaran Pengesahan untuk mengesahkan bahawa pengguna mempunyai hak akses. Jika anda memerlukan fungsi pengurusan kebenaran yang lebih maju, anda boleh mencapainya dengan melanjutkan komponen Auth.
Atas ialah kandungan terperinci Cara menggunakan kebenaran Pengesahan ThinkPHP6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!