Maison  >  Article  >  cadre php  >  Utiliser Casbin comme middleware de contrôle des autorisations dans thinkphp

Utiliser Casbin comme middleware de contrôle des autorisations dans thinkphp

尚
avant
2020-05-26 09:17:093416parcourir

Utiliser Casbin comme middleware de contrôle des autorisations dans thinkphp

PHP-Casbin est un framework de contrôle d'accès open source puissant et efficace qui prend en charge la gestion des autorisations basée sur divers modèles de contrôle d'accès.

Think-Casbin est un package d'extension Casbin spécialement personnalisé pour ThinkPHP5.1, permettant aux développeurs d'utiliser plus facilement Casbin dans les projets thinkphp.

Installer

Créer le projet thinkphp (si ce n'est déjà fait) :

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

Dans le projet ThinkPHP, installez l'extension Think-Casbin :

composer require casbin/think-adapter

Publier resources:

php think casbin:publish

Cela créera automatiquement le fichier de configuration du modèle config/casbin-basic-model.conf et le fichier de configuration Casbin config/casbin.php.

Migration des données :

Étant donné que Think-Casbin stocke par défaut la politique de Casbin (Politique) dans la base de données, les informations de la table de base de données doivent être initialisées.

Avant l'exécution, veuillez vous assurer que les informations de connexion à la base de données sont correctement configurées. Si vous devez modifier les informations de connexion à la base de données de Casbin ou le nom de la table séparément, vous pouvez modifier la configuration dans config/casbin.php.

php think casbin:migrate

Cela créera automatiquement la table de politique de Casbin, casbin_rule.

Middleware

ThinkPHP introduit officiellement la prise en charge du middleware à partir de la version 5.1.6+.

Vous pouvez générer rapidement un middleware via les instructions de ligne de commande

php think make:middleware Authorization

Cette commande générera un middleware d'autorisation sous le répertoire application/http/middleware.

Dans le middleware, obtenez le nom d'utilisateur actuel, l'URI, la méthode de demande et vérifiez les autorisations via 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);
    }
}

Configuration du modèle Casbin

configcasbin - fichier de configuration 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

Vérification

Avant d'effectuer l'autorisation, ajoutez quelques politiques par défaut à la table casbin_rule de la base de données :

Utiliser Casbin comme middleware de contrôle des autorisations dans thinkphp

Ajouter le routage et son middleware :

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

Connectez-vous d'abord en tant qu'utilisateur et enregistrez le nom d'utilisateur dans SESSION. Vous pouvez visiter /users, /users/1 pour vérifier les autorisations.

Tutoriel recommandé : "TP5"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer