Maison > développement back-end > tutoriel php > PHP et Yii2 s'intègrent pour implémenter la fonction de gestion des autorisations RBAC

PHP et Yii2 s'intègrent pour implémenter la fonction de gestion des autorisations RBAC

王林
Libérer: 2023-06-25 21:20:02
original
1879 Les gens l'ont consulté

Avec le développement rapide de la technologie Internet, de plus en plus d'applications doivent faire face à des problèmes de gestion des autorisations. RBAC (Role-Based Access Control), en tant que modèle de gestion des autorisations mature, est largement utilisé dans diverses applications. Dans le domaine PHP, le framework Yii2 fournit un ensemble complet de solutions d'implémentation RBAC. Cet article expliquera comment intégrer PHP et Yii2 pour implémenter la gestion des autorisations RBAC.

1. Qu'est-ce que le RBAC ?

RBAC est un modèle de gestion des autorisations couramment utilisé, c'est-à-dire un contrôle d'accès basé sur les rôles. Dans le modèle RBAC, les autorisations sont divisées en une série de rôles et d'opérations. Les utilisateurs peuvent se voir attribuer un ou plusieurs rôles, et chaque rôle dispose d'autorisations différentes. L'avantage du modèle RBAC est sa flexibilité et sa facilité d'évolutivité.

2. RBAC dans Yii2

Le framework Yii2 fournit un ensemble complet de solutions d'implémentation RBAC, y compris des concepts tels que les autorisations, les rôles, les règles et leurs opérations. Dans Yii2, une autorisation est définie comme une opération ou un ensemble de plusieurs opérations, et chaque autorisation peut être attribuée à un ou plusieurs rôles. Un rôle représente un ensemble d'autorisations qui peuvent être accordées à un utilisateur. Les règles sont utilisées pour restreindre les actions des rôles. L'implémentation RBAC de

Yii2 adopte une méthode de gestion des rôles basée sur une base de données, qui stocke des informations telles que les autorisations, les rôles, les règles, etc. Le framework Yii2 fournit deux composants, ActiveRecord et DbManager, pour gérer ces opérations de gestion de rôles.

3. Étapes de mise en œuvre

Ce qui suit présente les étapes de mise en œuvre de la gestion des autorisations RBAC dans le framework Yii2.

  1. Créer une table d'autorisation

Créez une table nommée auth_item dans la base de données pour stocker les informations d'autorisation. La structure du tableau est la suivante :

CREATE TABLE `auth_item` (
  `name` varchar(64) NOT NULL,
  `type` smallint(6) NOT NULL,
  `description` varchar(255) DEFAULT NULL,
  `rule_name` varchar(64) DEFAULT NULL,
  `data` blob DEFAULT NULL,
  `created_at` int(11) DEFAULT NULL,
  `updated_at` int(11) DEFAULT NULL,
  PRIMARY KEY (`name`),
  KEY `idx-auth_item-type` (`type`),
  KEY `idx-auth_item-rule_name` (`rule_name`),
  CONSTRAINT `fk-auth_item-rule_name` FOREIGN KEY (`rule_name`) REFERENCES `auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Copier après la connexion

Dans le tableau, le champ nom représente le nom de l'autorisation, le champ type représente le type d'autorisation (1 représente le rôle, 2 représente l'autorisation), le champ description représente la description de l'autorisation, le champ nom_règle représente le nom de la règle d'autorisation et le champ de données représente les données d'autorisation. Les champs créé_at et mis à jour_at représentent l'heure de création et l'heure de modification.

  1. Créer une table de rôles

Créez une table nommée auth_item_child dans la base de données pour stocker les informations sur les rôles. La structure du tableau est la suivante :

CREATE TABLE `auth_item_child` (
  `parent` varchar(64) NOT NULL,
  `child` varchar(64) NOT NULL,
  PRIMARY KEY (`parent`,`child`),
  KEY `idx-auth_item_child-child` (`child`),
  CONSTRAINT `fk-auth_item_child-child` FOREIGN KEY (`child`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk-auth_item_child-parent` FOREIGN KEY (`parent`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Copier après la connexion

Dans le tableau, le champ parent représente le nom du rôle parent et le champ enfant représente le nom du rôle enfant.

  1. Créez une table de règles

Créez une table nommée auth_rule dans la base de données pour stocker les informations sur les règles. La structure du tableau est la suivante :

CREATE TABLE `auth_rule` (
  `name` varchar(64) NOT NULL,
  `data` blob DEFAULT NULL,
  `created_at` int(11) DEFAULT NULL,
  `updated_at` int(11) DEFAULT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Copier après la connexion

Dans le tableau, le champ de nom représente le nom de la règle et le champ de données représente les données de la règle. Les champs créé_at et mis à jour_at représentent l'heure de création et l'heure de modification.

  1. Créer une table de rôles utilisateur

Créez une table nommée auth_assignment dans la base de données pour stocker les informations sur les rôles utilisateur. La structure du tableau est la suivante :

CREATE TABLE `auth_assignment` (
  `item_name` varchar(64) NOT NULL,
  `user_id` varchar(64) NOT NULL,
  `created_at` int(11) DEFAULT NULL,
  PRIMARY KEY (`item_name`,`user_id`),
  CONSTRAINT `fk-auth_assignment-item_name` FOREIGN KEY (`item_name`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Copier après la connexion

Dans le tableau, le champ item_name représente le nom du rôle et le champ user_id représente l'ID utilisateur.

  1. Configurer la base de données

Configurer les composants DbManager et AuthManager dans main.php :

'components' => [
    'authManager' => [
        'class' => 'yiibacDbManager',
    ],
    'db' => [
        'class' => 'yiidbConnection',
        'dsn' => 'mysql:host=localhost;dbname=test',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ],
],
Copier après la connexion
  1. Créer des autorisations et des rôles

À l'aide du composant AuthManager, vous pouvez créer des autorisations et des rôles via du code :

$auth = Yii::$app->authManager;

// 创建权限
$createPost = $auth->createPermission('createPost');
$createPost->description = '创建文章';
$auth->add($createPost);

// 创建角色
$admin = $auth->createRole('admin');
$admin->description = '管理员';
$auth->add($admin);

// 将权限分配给角色
$auth->addChild($admin, $createPost);
Copier après la connexion
  1. Give rôles utilisateur

Attribuez des rôles aux utilisateurs via le code :

$auth = Yii::$app->authManager;

// 将角色分配给用户
$auth->assign($admin, $user->id);
Copier après la connexion
  1. Utilisez RBAC

Utilisez RBAC pour le contrôle des autorisations dans le programme :

if (Yii::$app->user->can('createPost')) {
    // 允许创建文章
} else {
    // 不允许创建文章
}
Copier après la connexion

IV Résumé

Cet article présente comment implémenter la fonction de gestion des autorisations RBAC dans le programme. Framework Yii2. Il comprend des étapes telles que la création de tables d'autorisations, de tables de rôles, de tables de règles et de tables de rôles utilisateur, la configuration de la base de données, l'utilisation du composant AuthManager pour créer des autorisations et des rôles et l'utilisation de RBAC pour le contrôle des autorisations. RBAC est un modèle de gestion des autorisations flexible et facilement extensible qui peut répondre aux besoins de diverses applications. Dans le framework Yii2, grâce à l'utilisation des composants RBAC et AuthManager, la fonction de gestion des autorisations RBAC peut être facilement implémentée.

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:php.cn
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