ホームページ >PHPフレームワーク >ThinkPHP >thinkphp で権限認証を使用する方法

thinkphp で権限認証を使用する方法

WBOY
WBOYオリジナル
2023-05-26 14:36:081077ブラウズ

インターネットの継続的な発展に伴い、Web サイトのユーザー数は増加しており、ユーザーデータの管理とセキュリティを確保するために、権限認証はすべての Web サイトで不可欠な機能の 1 つとなっています。 PHPフレームワークの中でもThinkPHPは非常に人気のあるフレームワークであり、権限認証機能も充実しています。そこで、この記事では、ThinkPHP がどのように権限認証を使用するかを詳しく紹介します。

1. 権限認証の役割

権限認証は主に、さまざまな役割のユーザーの権限を制御して、ユーザーがアクセス権限を持つリソースにのみアクセスでき、それらのリソースを使用できないようにすることです。自分たちの権限を超えて。たとえば、電子商取引 Web サイトでは、管理者はすべての商品情報を表示および管理できますが、一般ユーザーは商品情報を閲覧することしかできず、変更や削除はできません。

2. 権限認証の実装方法

ThinkPHP フレームワークは、権限認証を実装する 2 つの方法、RBAC とノードベースの権限認証を提供します。 RBAC (Role-Based Access Control)、つまり役割ベースのアクセス制御では、さまざまなユーザーを役割に応じて分類します。ノードベースの権限認証は、ノードを介して権限を制御します。ノードは、コントローラ、操作メソッドなどになります。

  1. RBAC

フレームワークで RBAC を介して権限認証を実装するには、ThinkPHPLibraryThink にある Auth クラスを使用する必要があります。具体的な手順は以下のとおりです。

(1) ノードテーブルとロールテーブルを作成し、権限ノードとロールを関連付けます。ノード テーブルを作成すると、コントローラーと操作メソッドに対応できます。ロール テーブルには、以下に示すように、ロール名と対応するノード ID が保存されます:

ノード テーブル (think_node):

id name module controller action pid
1 index ホーム index index 0
2 add home index add 1
3 edit ホーム index edit 1
4 削除 ホーム #インデックス 削除 1

ロール テーブル (think_role):

##idnamenode_ids1管理者1、2、3、42ユーザー1
(2) コントローラーの Auth クラスを使用して権限認証を行う 具体的なコードは次のとおりです。 IndexController extends Controller

{

public function __construct()
{
    parent::__construct();
    //实例化Auth类
    $auth = new ThinkAuth();

    //获取当前用户的角色ID
    $uid = session('user_id');
    //获取当前请求的控制器和方法
    $url = MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME;

    //进行权限认证
    if (!$auth->check($url, $uid)) {
        $this->error('您没有访问该页面的权限!');
    }
}

}

上記のコードでは、Auth クラスをインスタンス化することで、現在のユーザーのロール ID、要求されたコントローラーとメソッドを取得し、$ を使用します。 auth->check()メソッドで権限認証を行います。検証に失敗した場合はエラーメッセージが出力されます。

ノードベースの権限認証

  1. ノードベースの権限認証は、フレームワークによって提供される Access クラスを使用して実装できます。このクラスも ThinkPHPLibraryThink にあります。
(1) コントローラーの Access クラスを使用して権限認証を行う 具体的なコードは次のとおりです:

class IndexController extends Controller

{

public function __construct()
{
    parent::__construct();
    //实例化Access类
    $access = new ThinkAccess();

    //获取当前用户的角色ID
    $uid = session('user_id');
    //获取当前请求的控制器和方法
    $url = MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME;

    //定义权限节点列表
    $nodes = array(
        'Index/index',//首页
        'Index/add',//添加页面
        'Index/edit',//编辑页面
        'Index/delete',//删除操作
    );

    //进行权限认证
    if (!$access->check($nodes, $uid, $url)) {
        $this->error('您没有访问该页面的权限!');
    }
}

}

上記のコードでは、Access クラスをインスタンス化することで、現在のユーザーのロール ID、要求されたコントローラーとメソッドを取得し、$access->check() メソッドを使用します。権限認証用。許可ノード リストの各項目はノード、つまりコントローラーとメソッドに対応します。検証に失敗した場合はエラーメッセージが出力されます。

3. パーミッション認証の最適化

実際のアプリケーションでは、コードの再利用性とセキュリティを向上させるために、パーミッション認証にいくつかの最適化を行う必要もあります。具体的な最適化ポイントは次のとおりです。

パブリック コントローラーの確立

  1. フレームワークの Common モジュールにパブリック コントローラー BaseController を作成し、権限検証ロジックを配置できます。この制御は容器内で行われます。他のコントローラーがこのコントローラーを継承した後、コードのこの部分を再利用できます。

ノード情報のキャッシュ

  1. 権限認証では、ノード テーブルとロール テーブルを毎回クエリする必要があるため、システムのパフォーマンスに影響します。したがって、クエリ結果をキャッシュしてシステムのパフォーマンスを向上させることができます。フレームワークが提供するキャッシュ クラスを使用してクエリ結果をキャッシュし、次回クエリを実行するときに、キャッシュされた結果を直接取得できます。

暗号化されたノード情報

  1. セキュリティを向上させるために、ノード情報を暗号化して、ノード情報が直接公開されるのを避けることができます。フレームワークが提供する暗号化クラスを使用して、ノード ID を暗号化し、暗号化されたノード情報をロール テーブルに保存できます。
4. 概要

アクセス許可認証は Web サイト開発に不可欠な部分であり、ユーザー データのセキュリティを確保し、ユーザー管理を向上させることができます。 ThinkPHP フレームワークでは、Auth クラスと Access クラスを利用することで、非常に便利に権限認証機能を実装することができます。この記事の導入により、ThinkPHP で権限認証を使用するための手順と最適化方法を理解することができ、開発作業に役立つと思います。

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

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