ThinkPHP6是一款優(yōu)秀的PHP框架,它為我們提供了很多高效的工具和功能。其中,Auth授權(quán)是一個(gè)非常強(qiáng)大的功能,可以幫助我們?cè)趹?yīng)用程序中進(jìn)行權(quán)限管理。本文將介紹如何使用ThinkPHP6的Auth授權(quán)。
- 安裝Auth組件
首先,我們需要安裝Auth組件。在終端中執(zhí)行以下命令:
composer require topthink/think-auth
登錄后復(fù)制
安裝完成后,我們需要在配置文件中添加Auth服務(wù)提供者:
// config/app.php return [ // ... 'providers' => [ // ... thinkuthServiceProvider::class, ], ];
登錄后復(fù)制
然后,我們需要執(zhí)行以下命令生成Auth配置文件:
php think auth:config
登錄后復(fù)制
- 配置Auth組件
Auth組件可以通過(guò)配置來(lái)實(shí)現(xiàn)不同的權(quán)限管理需求,下面是一個(gè)基礎(chǔ)的配置:
// 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', ];
登錄后復(fù)制auth_on:是否開(kāi)啟權(quán)限認(rèn)證,true開(kāi)啟,false關(guān)閉;auth_type:認(rèn)證方式,1為實(shí)時(shí)認(rèn)證(即每次驗(yàn)證權(quán)限時(shí)都重新獲取權(quán)限),2為登錄認(rèn)證(即用戶(hù)登錄后驗(yàn)證權(quán)限);auth_group:用戶(hù)組數(shù)據(jù)表名;auth_group_access:用戶(hù)組明細(xì)關(guān)聯(lián)表名;auth_rule:權(quán)限規(guī)則表;auth_user:用戶(hù)信息表。
- 創(chuàng)建權(quán)限規(guī)則
在使用Auth授權(quán)之前,我們需要先創(chuàng)建一些權(quán)限規(guī)則。權(quán)限規(guī)則可以控制用戶(hù)對(duì)不同資源的訪(fǎng)問(wèn)權(quán)限。我們需要在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)auth_rule表,然后通過(guò)添加記錄的方式來(lái)創(chuàng)建權(quán)限規(guī)則。
// appmodelAuthRule.php namespace appmodel; use thinkModel; class AuthRule extends Model { // }
登錄后復(fù)制
接下來(lái),我們需要在數(shù)據(jù)庫(kù)中創(chuàng)建auth_rule表:
CREATE TABLE `auth_rule` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL COMMENT '規(guī)則', `title` VARCHAR(100) NOT NULL COMMENT '規(guī)則名稱(chēng)', `type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '規(guī)則類(lèi)型', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '狀態(tài)', `condition` TEXT COMMENT '規(guī)則表達(dá)式', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='權(quán)限規(guī)則表';
登錄后復(fù)制
然后,我們可以通過(guò)以下方式添加一些權(quán)限規(guī)則:
use appmodelAuthRule; $rule = new AuthRule; $rule->name = 'admin/user/index'; $rule->title = '管理用戶(hù)'; $rule->save(); $rule = new AuthRule; $rule->name = 'admin/user/add'; $rule->title = '添加用戶(hù)'; $rule->save(); $rule = new AuthRule; $rule->name = 'admin/user/edit'; $rule->title = '編輯用戶(hù)'; $rule->save(); $rule = new AuthRule; $rule->name = 'admin/user/del'; $rule->title = '刪除用戶(hù)'; $rule->save();
登錄后復(fù)制
- 創(chuàng)建用戶(hù)組
除了權(quán)限規(guī)則外,我們還需要?jiǎng)?chuàng)建用戶(hù)組。用戶(hù)組是一些用戶(hù)的集合,擁有相同的訪(fǎng)問(wèn)權(quán)限。我們需要在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)auth_group表,然后通過(guò)添加記錄的方式來(lái)創(chuàng)建用戶(hù)組。
// appmodelAuthGroup.php namespace appmodel; use thinkModel; class AuthGroup extends Model { // }
登錄后復(fù)制
接下來(lái),我們需要在數(shù)據(jù)庫(kù)中創(chuàng)建auth_group表:
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 '狀態(tài)', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用戶(hù)組表';
登錄后復(fù)制
然后,我們可以通過(guò)以下方式添加一些用戶(hù)組:
use appmodelAuthGroup; $group = new AuthGroup; $group->title = '管理員'; $group->save(); $group = new AuthGroup; $group->title = '普通用戶(hù)'; $group->save();
登錄后復(fù)制
- 創(chuàng)建用戶(hù)組明細(xì)
現(xiàn)在,我們已經(jīng)創(chuàng)建了一些權(quán)限規(guī)則和用戶(hù)組。接下來(lái),我們需要將規(guī)則分配給用戶(hù)組。我們需要在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)auth_group_access表,然后通過(guò)添加記錄的方式來(lái)創(chuàng)建用戶(hù)組明細(xì)。
// appmodelAuthGroupAccess.php namespace appmodel; use thinkModel; class AuthGroupAccess extends Model { // }
登錄后復(fù)制
接下來(lái),我們需要在數(shù)據(jù)庫(kù)中創(chuàng)建auth_group_access表:
CREATE TABLE `auth_group_access` ( `uid` INT NOT NULL COMMENT '用戶(hù)id', `group_id` INT NOT NULL COMMENT '用戶(hù)組id', UNIQUE KEY `uid_group_id` (`uid`, `group_id`), KEY `uid` (`uid`), KEY `group_id` (`group_id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='用戶(hù)組明細(xì)表';
登錄后復(fù)制
然后,我們可以通過(guò)以下方式將權(quán)限規(guī)則分配給用戶(hù)組:
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();
登錄后復(fù)制
- 使用Auth授權(quán)
現(xiàn)在,我們已經(jīng)創(chuàng)建了一些權(quán)限規(guī)則和用戶(hù)組,并將規(guī)則分配給了用戶(hù)組。接下來(lái),我們可以使用Auth授權(quán)來(lái)驗(yàn)證用戶(hù)是否有訪(fǎng)問(wèn)權(quán)限。
// 授權(quán)驗(yàn)證 use thinkacadeSession; use thinkacadeRequest; use thinkacadeConfig; use thinkacadeDb; use thinkuthAuth; class BaseController extends Controller { protected function initialize() { parent::initialize(); // 如果用戶(hù)未登錄,則跳轉(zhuǎn)到登錄頁(yè)面 if (!Session::has('user')) { $this->redirect('/login'); } $uid = Session::get('user.id'); // 如果是超級(jí)管理員,則直接通過(guò)權(quán)限驗(yàn)證 if ($uid == Config::get('admin_id')) { return true; } $auth = new Auth; $route = strtolower(Request::controller() . '/' . Request::action()); if (!$auth->check($route, $uid)) { $this->error('無(wú)權(quán)限'); } } }
登錄后復(fù)制
首先,我們需要從Session中獲取用戶(hù)登錄信息。如果用戶(hù)未登錄,則跳轉(zhuǎn)到登錄頁(yè)面。
然后,我們獲取當(dāng)前用戶(hù)的uid。如果當(dāng)前用戶(hù)是超級(jí)管理員,則直接通過(guò)權(quán)限驗(yàn)證。
否則,我們創(chuàng)建一個(gè)Auth實(shí)例,并獲取當(dāng)前請(qǐng)求的路由。然后,我們使用Auth的check方法驗(yàn)證當(dāng)前用戶(hù)是否有訪(fǎng)問(wèn)權(quán)限。如果沒(méi)有,則拋出一個(gè)無(wú)權(quán)限的錯(cuò)誤。
- 小結(jié)
在本文中,我們學(xué)習(xí)了如何使用ThinkPHP6的Auth授權(quán)。我們使用Auth組件來(lái)實(shí)現(xiàn)權(quán)限管理,并創(chuàng)建了一些權(quán)限規(guī)則和用戶(hù)組。最后,我們使用Auth授權(quán)來(lái)驗(yàn)證用戶(hù)是否有訪(fǎng)問(wèn)權(quán)限。如果您需要更高級(jí)的權(quán)限管理功能,可以通過(guò)擴(kuò)展Auth組件來(lái)實(shí)現(xiàn)。
以上就是如何使用ThinkPHP6的Auth授權(quán)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注www.xfxf.net其它相關(guān)文章!