thinkphp6是一款優秀的php框架,它為我們提供了很多高效的工具和功能。其中,auth授權是一個非常強大的功能,可以幫助我們在應用程序中進行權限管理。本文將介紹如何使用thinkphp6的auth授權。
- 安裝Auth組件
首先,我們需要安裝Auth組件。在終端中執行以下命令:
composer require topthink/think-auth
安裝完成后,我們需要在配置文件中添加Auth服務提供者:
// config/app.php return [ // ... 'providers' => [ // ... thinkuthServiceProvider::class, ], ];
然后,我們需要執行以下命令生成Auth配置文件:
php think auth:config
- 配置Auth組件
Auth組件可以通過配置來實現不同的權限管理需求,下面是一個基礎的配置:
立即學習“PHP免費學習筆記(深入)”;
// 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', ];
- auth_on:是否開啟權限認證,true開啟,false關閉;
- auth_type:認證方式,1為實時認證(即每次驗證權限時都重新獲取權限),2為登錄認證(即用戶登錄后驗證權限);
- auth_group:用戶組數據表名;
- auth_group_access:用戶組明細關聯表名;
- auth_rule:權限規則表;
- auth_user:用戶信息表。
- 創建權限規則
在使用Auth授權之前,我們需要先創建一些權限規則。權限規則可以控制用戶對不同資源的訪問權限。我們需要在數據庫中創建一個auth_rule表,然后通過添加記錄的方式來創建權限規則。
// appmodelAuthRule.php namespace appmodel; use thinkModel; class AuthRule extends Model { // }
接下來,我們需要在數據庫中創建auth_rule表:
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();
- 創建用戶組
除了權限規則外,我們還需要創建用戶組。用戶組是一些用戶的集合,擁有相同的訪問權限。我們需要在數據庫中創建一個auth_group表,然后通過添加記錄的方式來創建用戶組。
// appmodelAuthGroup.php namespace appmodel; use thinkModel; class AuthGroup extends Model { // }
接下來,我們需要在數據庫中創建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 '狀態', 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();
- 創建用戶組明細
現在,我們已經創建了一些權限規則和用戶組。接下來,我們需要將規則分配給用戶組。我們需要在數據庫中創建一個auth_group_access表,然后通過添加記錄的方式來創建用戶組明細。
// appmodelAuthGroupAccess.php namespace appmodel; use thinkModel; class AuthGroupAccess extends Model { // }
接下來,我們需要在數據庫中創建auth_group_access表:
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();
- 使用Auth授權
現在,我們已經創建了一些權限規則和用戶組,并將規則分配給了用戶組。接下來,我們可以使用Auth授權來驗證用戶是否有訪問權限。
// 授權驗證 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('無權限'); } } }
首先,我們需要從Session中獲取用戶登錄信息。如果用戶未登錄,則跳轉到登錄頁面。
然后,我們獲取當前用戶的uid。如果當前用戶是超級管理員,則直接通過權限驗證。
否則,我們創建一個Auth實例,并獲取當前請求的路由。然后,我們使用Auth的check方法驗證當前用戶是否有訪問權限。如果沒有,則拋出一個無權限的錯誤。
- 小結
在本文中,我們學習了如何使用ThinkPHP6的Auth授權。我們使用Auth組件來實現權限管理,并創建了一些權限規則和用戶組。最后,我們使用Auth授權來驗證用戶是否有訪問權限。如果您需要更高級的權限管理功能,可以通過擴展Auth組件來實現。