ホームページ  >  記事  >  PHPフレームワーク  >  thinkphp で Casbin を権限制御ミドルウェアとして使用する

thinkphp で Casbin を権限制御ミドルウェアとして使用する

尚
転載
2020-05-26 09:17:093398ブラウズ

thinkphp で Casbin を権限制御ミドルウェアとして使用する

PHP-Casbin は、さまざまなアクセス制御モデルに基づいた権限管理をサポートする、強力かつ効率的なオープンソースのアクセス制御フレームワークです。

Think-Casbin は、ThinkPHP5.1 用に特別にカスタマイズされた Casbin 拡張パッケージで、開発者が thinkphp プロジェクトで Casbin を簡単に使用できるようにします。

インストール

thinkphp プロジェクトを作成します (利用できない場合):

composer create-project topthink/think=5.1.* tp5

ThinkPHP プロジェクトに、Think-Casbin 拡張機能をインストールします:

composer require casbin/think-adapter

リソースを公開します:

php think casbin:publish

これにより、モデル設定ファイル config/casbin-basic-model.conf と Casbin 設定ファイル config/casbin.php が自動的に作成されます。

データ移行:

Think-Casbin はデフォルトで Casbin のポリシー (Policy) をデータベースに保存するため、データベースのテーブル情報を初期化する必要があります。

実行する前に、データベース接続情報が正しく設定されていることを確認してください。Casbin のデータベース接続情報やテーブル名を個別に変更する必要がある場合は、config/casbin.php で設定を変更できます。

php think casbin:migrate

これにより、Casbin のポリシー テーブル casbin_rule が自動的に作成されます。

ミドルウェア

ThinkPHP バージョン 5.1.6 以降、ミドルウェア サポートが正式に導入されます。

コマンド ライン命令を使用してミドルウェアをすばやく生成できます

php think make:middleware Authorization

この命令により、application/http/middleware ディレクトリに認可ミドルウェアが生成されます。

ミドルウェアで、現在のユーザー名、URI、リクエストメソッドを取得し、Casbin を介して権限を確認します:

<?php

namespace app\http\middleware;

use Casbin;
use think\facade\Session;

class Authorization
{
    public function handle($request, \Closure $next)
    {
        // 当前登录用户名,这里以session为例
        // $user = Session::get(&#39;user_name&#39;) ?: &#39;test_user&#39;;
        $user = Session::get(&#39;user_name&#39;);

        $url = $request->url();
        $action = $request->method();

        if (!$user){
            return response()->data(&#39;Unauthenticated.&#39;)->code(401);
        }

        if (!Casbin::enforce($user, $url, $action)) {
            return response()->data(&#39;Unauthorized.&#39;)->code(403);
        }

        return $next($request);
    }
}

Casbin モデル設定

config \ casbin-basic-model.conf 設定ファイル:

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == p.sub && keyMatch2(r.obj, p.obj) && r.act == p.act

Verification

認可を実行する前に、いくつかのデフォルト ポリシーをデータベース casbin_rule テーブルに追加します:

thinkphp で Casbin を権限制御ミドルウェアとして使用する

ルーティングとそのミドルウェアを追加します:

Route::group(&#39;users&#39;, function () {
    
    Route::get(&#39;&#39;, function () {
        return &#39;Users data.&#39;;
    });

    Route::get(&#39;/:id&#39;, function ($id) {
        return &#39;User: &#39;.$id;
    });

})->middleware(\app\http\middleware\Authorization::class);

まず、ユーザーにログインし、ユーザー名を SESSION に保存します。/users、/users/1 にアクセスして、権限。

推奨チュートリアル:「TP5

以上がthinkphp で Casbin を権限制御ミドルウェアとして使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。