Casbin
Description
Casbin est un cadre de contrôle d'accès open-source puissant et efficace, dont le mécanisme de gestion des autorisations prend en charge plusieurs modèles de contrôle d'accès.
Adresse du projet
https://github.com/teamones-open/casbin
Installation
composer require teamones/casbin
Site officiel de Casbin
Pour des informations détaillées, vous pouvez consulter la documentation officielle en chinois, ici nous allons seulement expliquer comment le configurer et l'utiliser dans webman.
https://casbin.org/docs/zh-CN/overview
Structure du répertoire
.
├── config Répertoire de configuration
│ ├── casbin-restful-model.conf Fichier de configuration du modèle de permission utilisé
│ ├── casbin.php Configuration de casbin
......
├── database Fichiers de base de données
│ ├── migrations Fichiers de migration
│ │ └── 20210218074218_create_rule_table.php
......
Fichier de migration de base de données
<?php
use Phinx\Migration\AbstractMigration;
class CreateRuleTable extends AbstractMigration
{
/**
* Change Method.
*
* Écrivez vos migrations réversibles en utilisant cette méthode.
*
* Plus d'informations sur l'écriture des migrations sont disponibles ici :
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*
* Les commandes suivantes peuvent être utilisées dans cette méthode et Phinx
* les inversera automatiquement lors du retour en arrière :
*
* createTable
* renameTable
* addColumn
* addCustomColumn
* renameColumn
* addIndex
* addForeignKey
*
* Tous les autres changements destructeurs entraîneront une erreur lors de la
* tentative de rollback de la migration.
*
* N'oubliez pas d'appeler "create()" ou "update()" et NON "save()" lorsque vous travaillez
* avec la classe Table.
*/
public function change()
{
$table = $this->table('rule', ['id' => false, 'primary_key' => ['id'], 'engine' => 'InnoDB', 'collation' => 'utf8mb4_general_ci', 'comment' => 'Table des règles']);
// Ajouter des champs de données
$table->addColumn('id', 'integer', ['identity' => true, 'signed' => false, 'limit' => 11, 'comment' => 'ID principal'])
->addColumn('ptype', 'char', ['default' => '', 'limit' => 8, 'comment' => 'Type de règle'])
->addColumn('v0', 'string', ['default' => '', 'limit' => 128])
->addColumn('v1', 'string', ['default' => '', 'limit' => 128])
->addColumn('v2', 'string', ['default' => '', 'limit' => 128])
->addColumn('v3', 'string', ['default' => '', 'limit' => 128])
->addColumn('v4', 'string', ['default' => '', 'limit' => 128])
->addColumn('v5', 'string', ['default' => '', 'limit' => 128]);
// Exécuter la création
$table->create();
}
}
Configuration de casbin
Pour la syntaxe de configuration du modèle de règles d'autorisation, consultez : https://casbin.org/docs/zh-CN/syntax-for-models
<?php
return [
'default' => [
'model' => [
'config_type' => 'file',
'config_file_path' => config_path() . '/casbin-restful-model.conf', // Fichier de configuration du modèle de règles d'autorisation
'config_text' => '',
],
'adapter' => [
'type' => 'model', // modèle ou adaptateur
'class' => \app\model\Rule::class,
],
],
// Plusieurs modèles de permissions peuvent être configurés
'rbac' => [
'model' => [
'config_type' => 'file',
'config_file_path' => config_path() . '/casbin-rbac-model.conf', // Fichier de configuration du modèle de règles d'autorisation
'config_text' => '',
],
'adapter' => [
'type' => 'model', // modèle ou adaptateur
'class' => \app\model\RBACRule::class,
],
],
];
Adaptateur
L'adaptateur dans le paquet composer actuel est basé sur la méthode model de think-orm, pour d'autres ORM, consultez vendor/teamones/src/adapters/DatabaseAdapter.php.
Puis modifiez la configuration.
return [
'default' => [
'model' => [
'config_type' => 'file',
'config_file_path' => config_path() . '/casbin-restful-model.conf', // Fichier de configuration du modèle de règles d'autorisation
'config_text' => '',
],
'adapter' => [
'type' => 'adapter', // Configurez ici le type en mode adaptateur
'class' => \app\adapter\DatabaseAdapter::class,
],
],
];
Instructions d'utilisation
Inclusion
# Inclusion
use teamones\casbin\Enforcer;
Deux façons d'utiliser
# 1. Utilisez par défaut la configuration par défaut
Enforcer::addPermissionForUser('user1', '/user', 'read');
# 1. Utilisez la configuration rbac personnalisée
Enforcer::instance('rbac')->addPermissionForUser('user1', '/user', 'read');
Introduction aux API courantes
Pour plus d'utilisations des API, veuillez consulter la documentation officielle.
- API de gestion : https://casbin.org/docs/zh-CN/management-api
- API RBAC : https://casbin.org/docs/zh-CN/rbac-api
# Ajouter une permission à un utilisateur
Enforcer::addPermissionForUser('user1', '/user', 'read');
# Supprimer une permission d'un utilisateur
Enforcer::deletePermissionForUser('user1', '/user', 'read');
# Obtenir toutes les permissions d'un utilisateur
Enforcer::getPermissionsForUser('user1');
# Ajouter un rôle à un utilisateur
Enforcer::addRoleForUser('user1', 'role1');
# Ajouter une permission à un rôle
Enforcer::addPermissionForUser('role1', '/user', 'edit');
# Obtenir tous les rôles
Enforcer::getAllRoles();
# Obtenir tous les rôles d'un utilisateur
Enforcer::getRolesForUser('user1');
# Obtenir les utilisateurs d'un rôle
Enforcer::getUsersForRole('role1');
# Vérifier si un utilisateur appartient à un rôle
Enforcer::hasRoleForUser('use1', 'role1');
# Supprimer un rôle d'utilisateur
Enforcer::deleteRoleForUser('use1', 'role1');
# Supprimer tous les rôles d'un utilisateur
Enforcer::deleteRolesForUser('use1');
# Supprimer un rôle
Enforcer::deleteRole('role1');
# Supprimer une permission
Enforcer::deletePermission('/user', 'read');
# Supprimer toutes les permissions d'un utilisateur ou d'un rôle
Enforcer::deletePermissionsForUser('user1');
Enforcer::deletePermissionsForUser('role1');
# Vérifier la permission, retourne true ou false
Enforcer::enforce("user1", "/user", "edit");