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('user_name') ?: 'test_user'; $user = Session::get('user_name'); $url = $request->url(); $action = $request->method(); if (!$user){ return response()->data('Unauthenticated.')->code(401); } if (!Casbin::enforce($user, $url, $action)) { return response()->data('Unauthorized.')->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 テーブルに追加します:
ルーティングとそのミドルウェアを追加します:
Route::group('users', function () { Route::get('', function () { return 'Users data.'; }); Route::get('/:id', function ($id) { return 'User: '.$id; }); })->middleware(\app\http\middleware\Authorization::class);
まず、ユーザーにログインし、ユーザー名を SESSION に保存します。/users、/users/1 にアクセスして、権限。
推奨チュートリアル:「TP5」
以上がthinkphp で Casbin を権限制御ミドルウェアとして使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。