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('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); } }
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 :
Ajouter le routage et son middleware :
Route::group('users', function () { Route::get('', function () { return 'Users data.'; }); Route::get('/:id', function ($id) { return 'User: '.$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!