PHP-Casbin ist ein leistungsstarkes und effizientes Open-Source-Zugriffskontroll-Framework, das die Berechtigungsverwaltung basierend auf verschiedenen Zugriffskontrollmodellen unterstützt.
Think-Casbin ist ein Casbin-Erweiterungspaket, das speziell für ThinkPHP5.1 angepasst wurde und Entwicklern die Verwendung von Casbin in thinkphp-Projekten erleichtert.
Installieren
Erstellen Sie das thinkphp-Projekt (falls noch nicht geschehen):
composer create-project topthink/think=5.1.* tp5
Installieren Sie im ThinkPHP-Projekt die Think-Casbin-Erweiterung:
composer require casbin/think-adapter
Veröffentlichen Ressourcen:
php think casbin:publish
Dadurch werden automatisch die Modellkonfigurationsdatei config/casbin-basic-model.conf und die Casbin-Konfigurationsdatei config/casbin.php erstellt.
Datenmigration:
Da Think-Casbin die Casbin-Richtlinie (Policy) standardmäßig in der Datenbank speichert, müssen die Datenbanktabelleninformationen initialisiert werden.
Stellen Sie vor der Ausführung sicher, dass die Datenbankverbindungsinformationen korrekt konfiguriert sind. Wenn Sie die Datenbankverbindungsinformationen oder den Tabellennamen von Casbin separat ändern müssen, können Sie die Konfiguration in config/casbin.php ändern.
php think casbin:migrate
Dadurch wird automatisch Casbins Richtlinientabelle casbin_rule erstellt.
Middleware
ThinkPHP führt offiziell die Middleware-Unterstützung ab Version 5.1.6+ ein.
Sie können Middleware schnell über Befehlszeilenanweisungen generieren
php think make:middleware Authorization
Dieser Befehl generiert eine Autorisierungs-Middleware im Verzeichnis application/http/middleware.
Rufen Sie in der Middleware den aktuellen Benutzernamen, den URI, die Anforderungsmethode ab und überprüfen Sie die Berechtigungen über 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-Modellkonfiguration
configcasbin - Konfigurationsdatei „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
Überprüfung
Fügen Sie vor der Autorisierung einige Standardrichtlinien zur Datenbanktabelle casbin_rule hinzu:
Routing und seine Middleware hinzufügen:
Route::group('users', function () { Route::get('', function () { return 'Users data.'; }); Route::get('/:id', function ($id) { return 'User: '.$id; }); })->middleware(\app\http\middleware\Authorization::class);
Melden Sie sich zunächst als Benutzer an und speichern Sie den Benutzernamen unter SESSION. Sie können /users, /users/1 besuchen, um die Berechtigungen zu überprüfen.
Empfohlenes Tutorial: „TP5“
Das obige ist der detaillierte Inhalt vonVerwendung von Casbin als Berechtigungskontroll-Middleware in thinkphp. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!