首頁 >php框架 >ThinkPHP >如何使用ThinkPHP6的Auth授權

如何使用ThinkPHP6的Auth授權

PHPz
PHPz原創
2023-06-20 08:27:131445瀏覽

ThinkPHP6是一款優秀的PHP框架,它為我們提供了許多高效的工具和功能。其中,Auth授權是一個非常強大的功能,可以幫助我們在應用程式中進行權限管理。本文將介紹如何使用ThinkPHP6的Auth授權。

  1. 安裝Auth元件

首先,我們要安裝Auth元件。在終端機中執行以下命令:

composer require topthink/think-auth

安裝完成後,我們需要在設定檔中新增Auth服務提供者:

// config/app.php

return [
    // ...
    'providers' => [
        // ...
        thinkuthServiceProvider::class,
    ],
];

然後,我們需要執行下列命令產生Auth設定檔:

php think auth:config
  1. 配置Auth元件

Auth元件可以透過設定來實現不同的權限管理需求,以下是一個基礎的設定:

// 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:使用者資訊表。
  1. 建立權限規則

在使用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();
  1. #建立用戶群組

除了權限規則外,我們還需要建立使用者群組。使用者群組是一些使用者的集合,擁有相同的存取權限。我們需要在資料庫中建立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();
  1. 建立用戶群組明細

現在,我們已經建立了一些權限規則和使用者群組。接下來,我們需要將規則指派給使用者群組。我們需要在資料庫中建立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();
  1. 使用Auth授權

現在,我們已經建立了一些權限規則和使用者群組,並將規則指派給了使用者群組。接下來,我們可以使用Auth授權來驗證使用者是否有存取權限。

// 授权验证
use thinkacadeSession;
use thinkacadeRequest;
use thinkacadeConfig;
use thinkacadeDb;
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方法驗證目前使用者是否有存取權限。如果沒有,則拋出一個無權限的錯誤。

  1. 小結

在本文中,我們學習如何使用ThinkPHP6的Auth授權。我們使用Auth元件來實現權限管理,並建立了一些權限規則和使用者群組。最後,我們使用Auth授權來驗證使用者是否有存取權限。如果您需要更進階的權限管理功能,可以透過擴充Auth元件來實現。

以上是如何使用ThinkPHP6的Auth授權的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn