Heim > PHP-Framework > Denken Sie an PHP > Verwendung von Casbin als Berechtigungskontroll-Middleware in thinkphp

Verwendung von Casbin als Berechtigungskontroll-Middleware in thinkphp

Freigeben: 2020-05-26 09:17:09
nach vorne
3451 Leute haben es durchsucht

Verwendung von Casbin als Berechtigungskontroll-Middleware in thinkphp

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
Nach dem Login kopieren

Installieren Sie im ThinkPHP-Projekt die Think-Casbin-Erweiterung:

composer require casbin/think-adapter
Nach dem Login kopieren

Veröffentlichen Ressourcen:

php think casbin:publish
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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(&#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);
    }
}
Nach dem Login kopieren

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
Nach dem Login kopieren

Überprüfung

Fügen Sie vor der Autorisierung einige Standardrichtlinien zur Datenbanktabelle casbin_rule hinzu:

Verwendung von Casbin als Berechtigungskontroll-Middleware in thinkphp

Routing und seine Middleware hinzufügen:

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);
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage