Casbin

Description

Casbin est un puissant framework open source de contrôle d'accès, avec un mécanisme de gestion des autorisations prenant 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 Web de Casbin

Pour une utilisation détaillée, veuillez consulter la documentation officielle en chinois, nous aborderons ici comment configurer et 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 d'autorisation utilisé
│   ├── casbin.php                Configuration casbin
......
├── database                      Fichier de base de données
│   ├── migrations                Fichiers de migration
│   │   └── 20210218074218_create_rule_table.php
......

Fichier de migration de la base de données

<?php

use Phinx\Migration\AbstractMigration;

class CreateRuleTable extends AbstractMigration
{
    /**
     * Méthode de modification
     *
     * É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
     *
     * Toute autre modification destructive provoquera une erreur lors de la
     * tentative d'annulation de la migration.
     *
     * N'oubliez pas d'appeler "create()" ou "update()" et NON "save()" lors du travail
     * avec la classe Table.
     */
    public function change()
    {
        $table = $this->table('rule', ['id' => false, 'primary_key' => ['id'], 'engine' => 'InnoDB', 'collation' => 'utf8mb4_general_ci', 'comment' => 'Table de règles']);

        // Ajout des champs de données
        $table->addColumn('id', 'integer', ['identity' => true, 'signed' => false, 'limit' => 11, 'comment' => 'ID primaire'])
            ->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écution de la création
        $table->create();
    }
}

Configuration Casbin

Veuillez consulter la syntaxe de configuration du modèle de règles d'autorisation : 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 d'autorisation
            'config_text' => '',
        ],
        'adapter' => [
            'type' => 'model', // modèle ou adaptateur
            'class' => \app\model\Rule::class,
        ],
    ],
    // Vous pouvez configurer plusieurs modèles d'autorisation
    'rbac' => [
        'model' => [
            'config_type' => 'file',
            'config_file_path' => config_path() . '/casbin-rbac-model.conf', // Fichier de configuration du modèle d'autorisation
            'config_text' => '',
        ],
        'adapter' => [
            'type' => 'model', // modèle ou adaptateur
            'class' => \app\model\RBACRule::class,
        ],
    ],
];

Adaptateur

L'adaptateur inclus dans le package actuel est la méthode model de think-orm. Pour d'autres orm, veuillez consulter vendor/teamones/src/adapters/DatabaseAdapter.php

Ensuite, modifiez la configuration

return [
    'default' => [
        'model' => [
            'config_type' => 'file',
            'config_file_path' => config_path() . '/casbin-restful-model.conf', // Fichier de configuration du modèle d'autorisation
            'config_text' => '',
        ],
        'adapter' => [
            'type' => 'adapter', // ici le type est configuré en mode adaptateur
            'class' => \app\adapter\DatabaseAdapter::class,
        ],
    ],
];

Instructions d'utilisation

Importation

# Importation
use teamones\casbin\Enforcer;

Deux modes d'utilisation

# 1. Utilisation par défaut de la configuration par défaut
Enforcer::addPermissionForUser('user1', '/user', 'read');

# 2. Utilisation de la configuration rbac personnalisée
Enforcer::instance('rbac')->addPermissionForUser('user1', '/user', 'read');

Présentation des API courantes

Pour plus d'exemples d'utilisation des API, veuillez consulter le site officiel :

# Ajouter des autorisations pour un utilisateur

Enforcer::addPermissionForUser('user1', '/user', 'read');

# Supprimer les autorisations d'un utilisateur

Enforcer::deletePermissionForUser('user1', '/user', 'read');

# Obtenir toutes les autorisations de l'utilisateur

Enforcer::getPermissionsForUser('user1'); 

# Ajouter des rôles à un utilisateur

Enforcer::addRoleForUser('user1', 'role1');

# Ajouter des autorisations à un rôle

Enforcer::addPermissionForUser('role1', '/user', 'edit');

# Obtenir tous les rôles

Enforcer::getAllRoles();

# Obtenir tous les rôles de l'utilisateur

Enforcer::getRolesForUser('user1');

# Obtenir les utilisateurs pour un rôle donné

Enforcer::getUsersForRole('role1');

# Vérifier si un utilisateur appartient à un rôle

Enforcer::hasRoleForUser('use1', 'role1');

# Supprimer le rôle d'un utilisateur

Enforcer::deleteRoleForUser('use1', 'role1');

# Supprimer tous les rôles d'un utilisateur

Enforcer::deleteRolesForUser('use1');

# Supprimer le rôle

Enforcer::deleteRole('role1');

# Supprimer l'autorisation

Enforcer::deletePermission('/user', 'read');

# Supprimer toutes les autorisations d'un utilisateur ou d'un rôle

Enforcer::deletePermissionsForUser('user1');
Enforcer::deletePermissionsForUser('role1');

# Vérifier les autorisations, renvoie vrai ou faux

Enforcer::enforce("user1", "/user", "edit");