Heim  >  Artikel  >  PHP-Framework  >  Verwendung von Casbin als Berechtigungskontroll-Middleware in thinkphp

Verwendung von Casbin als Berechtigungskontroll-Middleware in thinkphp

尚
nach vorne
2020-05-26 09:17:093416Durchsuche

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

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(&#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-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:

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);

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen