Maison  >  Article  >  développement back-end  >  Contrôle d'accès basé sur les rôles d'autorisation Yii (RBAC)

Contrôle d'accès basé sur les rôles d'autorisation Yii (RBAC)

步履不停
步履不停original
2019-06-29 17:49:592722parcourir

Contrôle d'accès basé sur les rôles d'autorisation Yii (RBAC)

1 : Concepts de base

Un rôle est un ensemble d'autorisations (par exemple : créer des publications, modifier des publications). Un rôle peut être attribué à un ou plusieurs utilisateurs. Pour vérifier si un utilisateur dispose d'une autorisation spécifique, le système vérifie si le rôle contenant l'autorisation est attribué à l'utilisateur.

Vous pouvez utiliser une règle pour l'associer à un rôle ou une autorisation. Une règle est représentée par un morceau de code et l'exécution de la règle est effectuée lors de la vérification si un utilisateur remplit ce rôle ou cette autorisation. Par exemple, l'autorisation « modifier la publication » pourrait utiliser une règle qui vérifie si l'utilisateur est le créateur de la publication. Lors de la vérification des autorisations, si l'utilisateur n'est pas le créateur de la publication, alors il (elle) sera considéré comme n'ayant pas l'autorisation de « modifier les publications ».

Les rôles et les autorisations peuvent être organisés hiérarchiquement. Dans certains cas, un rôle peut être constitué d'autres rôles ou autorisations, qui à leur tour peuvent être constitués d'autres autorisations. Yii implémente une hiérarchie d'ordres locaux, qui contient des niveaux d'arborescence plus spécifiques. Un rôle peut contenir une autorisation, mais pas l'inverse. (Note du traducteur : on peut comprendre que les rôles sont en haut et les autorisations en bas. Si les autorisations sont rencontrées de haut en bas, les rôles ne peuvent pas apparaître plus bas)

Deux : Configurer RBAC

Au début Avant de définir les données d'autorisation et d'effectuer des contrôles d'accès, vous devez configurer le composant d'application yiibaseApplication::authManager. Yii fournit deux ensembles de gestionnaires d'autorisations : yiirbacPhpManager et yiirbacDbManager. Le premier utilise des scripts PHP pour stocker les données d'autorisation, tandis que le second utilise une base de données pour stocker les données d'autorisation. Si votre application ne nécessite pas une grande quantité de gestion dynamique des rôles et des autorisations, vous pouvez envisager d'utiliser l'ancien

1 : Utiliser yiirbacPhpManager

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\PhpManager',
        ],        // ...
    ],
];

Une fois la configuration terminée, vous pouvez utiliser Yii : :$app-> ;authManager pour accéder à authManager

yiirbacPhpManager enregistre les données RBAC dans des fichiers du répertoire @app/rbac par défaut. Si les données du niveau d'autorisation doivent être modifiées au moment de l'exécution, assurez-vous que le processus du serveur WEB dispose des autorisations en écriture pour le répertoire et les fichiers qu'il contient.

2 : Utilisez yiirbacDbManager

(1) Configurez yiirbacDbManager

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\DbManager',            // uncomment if you want to cache RBAC items hierarchy
            // 'cache' => 'cache',
        ],        // ...
    ],
];

Notez ici :

Si vous utilisez le modèle de base de Yii, ce qui précède Pour la configuration, vous devez le configurer à la fois dans les fichiers config/console.php et config/web.php. Si vous êtes un modèle avancé de Yii, vous n'avez besoin de le configurer qu'une seule fois dans le fichier common/config/main.php

.

(2) Générez les tables d'autorisation requises

Si vous utilisez yiirbacDbManager, vous devez générer 4 tables de base de données pour stocker les données d'autorisation (elles ont toutes des noms de table par défaut. Si vous devez modifier les noms de table, configurer yiirbacDbManager Modifier si nécessaire)

itemTable : Cette table stocke les entrées d'autorisation (Note du traducteur : rôles et autorisations). Le nom de la table par défaut est "auth_item" .
itemChildTable : Cette table stocke la relation hiérarchique des entrées autorisées. Le nom de table par défaut est "auth_item_child".
assignmentTable : Cette table stocke l'attribution des entrées d'autorisation aux utilisateurs. Le nom de la table par défaut est « auth_assignment ».
ruleTable : Cette table stocke les règles. Le nom de la table par défaut est « auth_rule ».

Exécuter

yii migrate --migrationPath=@yii/rbac/migrations

Dans le répertoire du projet, après avoir exécuté la commande ci-dessus, à ce fois que nous Les quatre tables mentionnées ci-dessus seront générées dans la base de données

Contrôle daccès basé sur les rôles dautorisation Yii (RBAC)

Si vous n'utilisez pas de commandes détaillées pour générer la base de données, vous pouvez ajouter le contenu de supplieryisoftyii2rbacmigrationsschema-mysql. sql Copiez-le dans la base de données et exécutez-le pour générer la table de données

Après avoir généré la table d'autorisations correspondante, nous pouvons utiliser Yii::$app->authManager pour accéder à authManager

Trois. : Établir les données d'autorisation

1 : Ajouter (créer) des autorisations (générer des données d'autorisation dans la table auth_item, le type est 2 indiquant les autorisations)

$auth = Yii::$app->authManager;// 添加 "createPost" 权限$createPost = $auth->createPermission('createPost');
$createPost->description = '创建了createPost权限';
$auth->add($createPost);

2 : Créer un rôle (générer des données de rôle dans le table auth_item, le type est 1 représente le rôle)

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');
$role->description = '创建了author角色';
$auth->add($role);

3 : Accorder les autorisations au rôle

(1) Accorder les autorisations spécifiées au rôle

$auth = Yii::$app->authManager;
$createPost = $auth->createPermission('createPost');//创建权限对象
$role = $auth->createRole('author');//创建角色对象
$auth->addChild($role, $createPost); //添加对应关系(给author角色添加createPost权限)

(2) Accorder tout autorisations du rôle au rôle spécifié

$auth = Yii::$app->authManager;
$role1 = $auth->createRole('author1');//创建角色对象
$role2 = $auth->createRole('author2');//创建权限对象
$auth->addChild($role1, $role2); //添加对应关系(给author1角色添加author2角色所有权限)

4 : attribuer des rôles aux utilisateurs

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');//创建角色对象$auth->assign($role, 1); #1是IdentityInterface::getId()返回的id,及用户表的id

Quatre : vérifier les autorisations

\Yii::$app->user->can($action) #$action表示权限\Yii::$app->user->can('createPost') #判断用户是否具有createPost权限

Obtenir le rôle de l'utilisateur

$auth = Yii::$app->authManager;
$roles = $auth->getRolesByUser($userId);

Obtenez les autorisations de l'utilisateur

$auth = Yii::$app->authManager;
$roles = $auth->getPermissionsByUser($userId);

Ce qui précède est une simple compréhension du contrôle d'accès basé sur les rôles (RBAC). Pour plus de détails, veuillez vous référer à la documentation officielle de Yii

.

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:
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