インターネットアプリケーションの継続的な開発に伴い、Web アプリケーションのセキュリティの重要性はますます高まっており、プログラムのセキュリティをどのように確保するかが開発者全員の課題となっています。認証認可テクノロジーは、ロールベースのアクセス制御を提供する一般的なソリューションです。
この記事では、ThinkPHP6 で Auth 認証テクノロジーを使用する方法を検討します。まず、認証認可の動作原理と中心となる概念を明確にする必要があります。
認証認可の中核はロールベースのアクセス制御であり、主に次の 3 つのステップに分かれています:
1.1 ロールの作成
Auth 認可を使用する前に、まずロールを作成する必要があります。ロールは、ユーザーが持つアクセス権を定義する一連の権限です。
1.2 ロールへのアクセス許可の割り当て
ロールを作成した後、対応するアクセス許可をロールに割り当てる必要があります。権限とは、どの機能モジュールまたはデータにアクセスできるかの許可を指します。
1.3 ユーザーにロールを割り当てる
最後に、ユーザーにロールを割り当てる必要があります。ユーザーには複数の役割を割り当てることができ、それによってユーザーが持つアクセス権が決まります。
認証承認ワークフローでは、アクセス コントローラーを使用してアクセス制御を実装します。アクセス コントローラーは、ユーザーが現在の URL へのアクセス権を持っているかどうかを確認するために使用され、ユーザーがアクセス権を持っている場合は、関連するコンテンツに引き続きアクセスできます。
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 を含むデータベース テーブルを作成します。
ユーザーテーブル関連の構造:
Field | Type | Comment |
---|---|---|
int | ||
varchar(20) | ||
varchar(255) | ||
datetime | ||
datetime |
タイプ | コメント | |
---|---|---|
name | ||
created_at | ||
updated_at | ||
Comment | #id | |
---|---|---|
name | varchar(20 ) | |
user_role テーブル関連の構造: |
Field
id | ||
---|---|---|
user_id | int | |
role_id | int | |
role_permission テーブル関連の構造: |
Field
id | ||
---|---|---|
role_id | int | |
permission_id | int | |
2.6 コントローラー コードの実装 | #以下では、サンプル コントローラーを使用して、Auth 認可を実装する方法を示します。サンプル コントローラー コードは次のとおりです。