ホームページ > PHPフレームワーク > ThinkPHP > ThinkPHP6 での権限制御テクノロジーの使用

ThinkPHP6 での権限制御テクノロジーの使用

WBOY
リリース: 2023-06-21 16:51:07
オリジナル
2203 人が閲覧しました

最近の Web アプリケーション開発では、アクセス許可制御テクノロジがますます重要になっています。これは、開発者がユーザー権限を管理し、データ アクセスを制御し、システム セキュリティを保護するのに役立ちます。 ThinkPHP6 は、さまざまな権限制御テクノロジーを提供する強力な PHP フレームワークであり、この記事ではその一部を紹介します。

  1. 認証と認可

ThinkPHP6 では、認証と認可は 2 つの異なる概念です。認証とは通常、ユーザーの身元を確認し、ユーザーが正当であるかどうかを判断することを指します。認可とは、特定のリソースにアクセスするためのアクセス許可をユーザーに付与することを指します。 ThinkPHP6 は、認証および認可機能を実装するための Auth コンポーネントを提供します。

Auth コンポーネントは、構成ファイルでユーザー、ロール、権限間の関係を定義し、Auth クラスのメソッドを呼び出して認証と認可を実行する必要があります。具体的な手順は次のとおりです。

(1) 関係を定義します。

構成ファイルでユーザー、ロール、権限間の関係を定義します。例:

'auth ' => [

'auth_on' => true, // 认证开关
'auth_type' => 1, // 认证方式,1为实时认证;2为登录认证。
'auth_group' => 'auth_group', // 用户组数据表名
'auth_group_access' => 'auth_group_access', // 用户-用户组关系表
'auth_rule' => 'auth_rule', // 权限规则表
'auth_user' => 'admin_user', // 用户信息表
ログイン後にコピー

],

上記のコードでは、認証機能を有効にするために「auth_on」スイッチを true に設定し、認証機能を使用するために「auth_type」を 1 に設定します。リアルタイム認証。次に、ユーザー グループ、ユーザーとユーザー グループの関係、権限ルール、およびユーザー情報という 4 つのテーブルの名前が定義されます。

(2) ユーザー認証

ユーザー認証には、Auth クラスの check メソッドを使用します。例:

use think acadeAuth;

// 認証ユーザー
if (Auth::check($username, $password)) {

// 认证通过
ログイン後にコピー

} else {

// 认证失败
ログイン後にコピー

}

上記のコードでは、$username と $password は、それぞれユーザーが入力したユーザー名とパスワードです。 Auth::check メソッドは認証結果を返します。認証が成功した場合は true を返し、そうでない場合は false を返します。

(3) 認可されたアクセス

認可されたアクセスの前に、現在ログインしているユーザーのロールと権限をセッションに保存する必要があります。例:

use think acadeSession;
use think acadeRequest;
use think acadeAuth;

// 現在のユーザー ロールと権限を保存します
$user = Auth: :user ();
$groups = Auth::getGroups($user['id']);
$rules = Auth::getRules($user['id']);
セッション: :set ('user_groups', $groups);
Session::set('user_rules', $rules);

次に、コントローラーの Auth クラスの check メソッドを使用して、ユーザーにはアクセス権があります。例:

use think acadeSession;
use think acadeRequest;
use think acadeAuth;

// ユーザー権限を決定する
$user = Session::get('ユーザー ');
$groups = Session::get('user_groups');
$rules = Session::get('user_rules');
if (Auth::check(Request::path) ( ), $groups, $rules)) {

// 用户有访问权限
ログイン後にコピー

} else {

// 用户无访问权限
ログイン後にコピー

}

上記のコードでは、Request::path() が現在のリクエストを取得します。 URL アドレス。$groups と $rules は、それぞれ現在のユーザーのロールと権限です。 Auth::check メソッドは、ユーザーにアクセス権があるかどうかを判断し、アクセス権がある場合は true を返し、そうでない場合は false を返します。

  1. RBAC

RBAC (Role-Based Access Control) は、ユーザーの役割と権限を分離する役割ベースのアクセス制御テクノロジであり、ユーザーは役割を通じて権限を取得します。 ThinkPHP6 は、役割ベースのアクセス制御を簡単に実装できる RBAC 拡張モジュールを提供します。

(1) RBAC 拡張モジュールのインストール

コマンド ラインで次のコマンドを実行するだけで、RBAC 拡張モジュールを ThinkPHP6 にインストールできるので非常に便利です。 ##composer require jiaming/admin -rbac

(2) データベース テーブルの作成

次のコマンドを実行して必要なデータベース テーブルを作成します:

php think merge:run - -seed /vendor/jiaming/admin -rbac/database/migrations

(3) RBAC の使用

RBAC 拡張モジュールを使用するには、ロール、権限、リソース、ルールを定義する必要があります。 ThinkPHP6 では、RBAC 関連の構成項目を config/auth.php で定義する必要があります (例:

'auth' => [

// ...
'auth_type' => 'rbac',
'rbac' => [
    'role_table' => 'admin_role',
    'user_table' => 'admin_user',
    'access_table' => 'admin_access',
    'node_table' => 'admin_node',
    'role_user_table' => 'admin_role_user',
],
ログイン後にコピー

],

in)上記のコードでは、「auth_type」が「rbac」に設定されています。これは、RBAC 認証方法が使用されることを意味し、関連するデータ テーブル名が定義されています。

次に、コントローラーで RBAC を初期化する必要があります。例:

use jiamingAdminRbacRbac;

class Index extends Controller

{

public function index()
{
    // 初始化RBAC
    Rbac::init();
    // ...
}
ログイン後にコピー

}

上記のコードでは、Rbac::init メソッドを呼び出して RBAC を初期化します。

最後に、コントローラーでアクセス制御を実行します。例:

use jiamingAdminRbacRbac;

class Index extends Controller

{

public function index()
{
    // 初始化RBAC
    Rbac::init();
    // 判断用户权限
    if (!Rbac::can('index/index/index')) {
        $this->error('您没有访问权限!');
    }
    // ...
}
ログイン後にコピー

}

上記のコードでは、Rbac::can メソッドは、現在のユーザーがインデックス/インデックス/インデックスにアクセスする権限を持っているかどうかを判断します。

概要

アクセス許可制御テクノロジは、最新の Web アプリケーション開発における重要な側面であり、システムのセキュリティとユーザー データを保護できます。 ThinkPHP6 では、認証と認可、RBAC などのさまざまな権限制御方法を使用できます。アプリケーションの要件と開発コストに基づいて適切な権限制御方法を選択することで、開発効率とアプリケーションのセキュリティを向上させることができます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート