Maison > cadre php > PensezPHP > le corps du texte

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

Libérer: 2020-05-26 09:17:09
avant
3418 Les gens l'ont consulté

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
Copier après la connexion

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

composer require casbin/think-adapter
Copier après la connexion

Publier resources:

php think casbin:publish
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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);
    }
}
Copier après la connexion

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
Copier après la connexion

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);
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal