ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP6 での Auth 認可テクノロジーの使用

ThinkPHP6 での Auth 認可テクノロジーの使用

WBOY
WBOYオリジナル
2023-06-20 17:50:312169ブラウズ

インターネットアプリケーションの継続的な開発に伴い、Web アプリケーションのセキュリティの重要性はますます高まっており、プログラムのセキュリティをどのように確保するかが開発者全員の課題となっています。認証認可テクノロジーは、ロールベースのアクセス制御を提供する一般的なソリューションです。

この記事では、ThinkPHP6 で Auth 認証テクノロジーを使用する方法を検討します。まず、認証認可の動作原理と中心となる概念を明確にする必要があります。

  1. 認証認可の仕組み

認証認可の中核はロールベースのアクセス制御であり、主に次の 3 つのステップに分かれています:

1.1 ロールの作成

Auth 認可を使用する前に、まずロールを作成する必要があります。ロールは、ユーザーが持つアクセス権を定義する一連の権限です。

1.2 ロールへのアクセス許可の割り当て

ロールを作成した後、対応するアクセス許可をロールに割り当てる必要があります。権限とは、どの機能モジュールまたはデータにアクセスできるかの許可を指します。

1.3 ユーザーにロールを割り当てる

最後に、ユーザーにロールを割り当てる必要があります。ユーザーには複数の役割を割り当てることができ、それによってユーザーが持つアクセス権が決まります。

認証承認ワークフローでは、アクセス コントローラーを使用してアクセス制御を実装します。アクセス コントローラーは、ユーザーが現在の URL へのアクセス権を持っているかどうかを確認するために使用され、ユーザーがアクセス権を持っている場合は、関連するコンテンツに引き続きアクセスできます。

  1. ThinkPHP6 での Auth 認可テクノロジーの使用

Auth 認可がどのように機能するかを理解したので、以下では ThinkPHP6 での Auth 認可テクノロジーの使用方法を詳しく説明します。バックグラウンドに管理者と一般ユーザーの 2 種類のユーザーがいるとします。管理者はすべてのコンテンツ モジュールにアクセスできますが、一般ユーザーは一部のコンテンツのみにアクセスできます。

2.1 認証プラグインのインストールと構成

認証テクノロジを使用する前に、まず認証プラグインをインストールして構成する必要があります。 ThinkPHP6 では、Auth プラグインがフレームワークに統合されており、簡単な設定で使用できます。

まず、config ディレクトリに auth.php 設定ファイルを作成します。設定情報は次のとおりです:

return [
    // 用户认证的类名,不设置则使用核心集成认证方法
    'auth'     => AppAuth::class,
    // 不需要认证的路由,可允许所有用户访问的路由
    'no_auth'  => ['index/index'],
    // 需要认证且验证失败时跳转的地址
    'fail_url' => 'index/login',
];

2.2 ユーザー モデルの作成

関連するユーザー モデルを作成します。コードは次のとおりです:

<?php
namespace appmodel;

use thinkModel;

class User extends Model {

    // 定义角色关联
    public function roles() {
        return $this->belongsToMany(Role::class, 'user_role');
    }

    // 判断用户是否有权限访问当前操作
    public function hasPermission($permission) {
        foreach ($this->roles as $role) {
            if ($role->checkPermission($permission)) {
                return true;
            }
        }

        return false;
    }
}

2.3 ロール モデルの作成

ロール モデルを作成します。関連するコードは次のとおりです:

<?php
namespace appmodel;

use thinkModel;

class Role extends Model {

    // 定义权限关联
    public function permissions() {
        return $this->belongsToMany(Permission::class, 'role_permission');
    }

    // 检查角色是否有权限访问当前操作
    public function checkPermission($permission) {
        foreach ($this->permissions as $item) {
            if ($item->name == $permission) {
                return true;
            }
        }

        return false;
    }
}

2.4 権限モデルの作成

権限モデルを作成します。関連するコードは次のとおりです。

<?php
namespace appmodel;

use thinkModel;

class Permission extends Model {
}

2.5 データベース テーブルの作成

ユーザー テーブル、ロール テーブル、権限テーブル、および 2 つのリレーショナル テーブル user_role と role_permission を含むデータベース テーブルを作成します。

ユーザーテーブル関連の構造:

#idintユーザー名varchar(20)パスワードvarchar(255)created_at datetimeupdated_atdatetime
Field Type Comment
ロール テーブル関連構造:

#フィールド# #idintnamevarchar(20)created_atdatetimeupdated_atdatetime権限テーブル関連の構造:
タイプ コメント

#FieldType#idintnamevarchar(20 )
Comment
user_role テーブル関連の構造:

Field

Type コメントidintuser_idintrole_idint
role_permission テーブル関連の構造:

Field

TypeCommentidintrole_idintpermission_idint#以下では、サンプル コントローラーを使用して、Auth 認可を実装する方法を示します。サンプル コントローラー コードは次のとおりです。
<?php
namespace appdmincontroller;

use appmodelUser;
use thinkController;

class Index extends Controller {

    // 后台首页
    public function index() {
        // 获取当前登录用户
        $user_id = session('user_id');
        $user = User::find($user_id);

        // 判断用户是否有权限访问当前操作
        if (!$user->hasPermission($this->request->path())) {
            $this->error('无权访问');
        }

        return view();
    }

    // 登录页面
    public function login() {
        return view();
    }

    // 处理登录请求
    public function do_login() {
        $username = $this->request->param('username');
        $password = $this->request->param('password');

        // 根据用户名查询用户
        $user = User::where('username', $username)->find();

        // 验证用户密码
        if ($user && password_verify($password, $user->password)) {
            // 记录登录状态
            session('user_id', $user->id);

            // 跳转到后台首页
            $this->redirect('index/index');
        } else {
            $this->error('登录失败');
        }
    }

    // 退出登录
    public function logout() {
        session('user_id', null);
        $this->redirect('index/login');
    }
}
2.6 コントローラー コードの実装
概要

この記事では、ThinkPHP6 での認証認可の動作原理、中心的な概念、およびアプリケーションの実装について紹介しました。 Auth 認可テクノロジーを使用すると、Web アプリケーションのセキュリティを効果的に向上させ、より安全で信頼性の高いサービスをユーザーに提供できます。その後の Web アプリケーション開発プロセスでも、セキュリティの保証に注意を払い、既存のセキュリティ技術を可能な限り最大限に活用する必要があります。

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

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