ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP6のAuth認可の使用方法

ThinkPHP6のAuth認可の使用方法

PHPz
PHPzオリジナル
2023-06-20 08:27:131391ブラウズ

ThinkPHP6 は、多くの効率的なツールと機能を提供する優れた PHP フレームワークです。その中でも、Auth 承認は、アプリケーションのアクセス許可の管理に役立つ非常に強力な機能です。この記事では、ThinkPHP6のAuth認証の使い方を紹介します。

  1. Auth コンポーネントのインストール

まず、Auth コンポーネントをインストールする必要があります。ターミナルで次のコマンドを実行します:

composer require topthink/think-auth

インストールが完了したら、構成ファイルに認証サービス プロバイダーを追加する必要があります:

// config/app.php

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

次に、次のコマンドを実行する必要があります。認証構成ファイルを生成するには:

php think auth:config
  1. 認証コンポーネントの構成

認証コンポーネントは、さまざまな権限管理要件を達成するように構成できます。基本的な構成は次のとおりです。

// 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 認可を使用して、ユーザーにアクセス権があるかどうかを確認できます。

// 授权验证
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('无权限');
        }
    }
}

まず、セッションからユーザーのログイン情報を取得する必要があります。ユーザーがログインしていない場合は、ログイン ページにジャンプします。

次に、現在のユーザーの uid を取得します。現在のユーザーがスーパー管理者の場合、権限の検証は直接行われます。

それ以外の場合は、Auth インスタンスを作成し、現在のリクエストのルートを取得します。次に、Auth check メソッドを使用して、現在のユーザーにアクセス権があるかどうかを確認します。そうでない場合は、権限なしエラーがスローされます。

  1. 概要

この記事では、ThinkPHP6 の Auth 認証の使用方法を学びました。 Auth コンポーネントを使用して権限管理を実装し、いくつかの権限ルールとユーザー グループを作成します。最後に、Auth 認可を使用して、ユーザーにアクセス権があることを確認します。より高度な権限管理機能が必要な場合は、Auth コンポーネントを拡張することでこれを実現できます。

以上がThinkPHP6のAuth認可の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。