Maison >cadre php >YII >Comment implémenter rbac dans yii2

Comment implémenter rbac dans yii2

(*-*)浩
(*-*)浩original
2019-12-30 09:42:082055parcourir

Comment implémenter rbac dans yii2

Contrôle d'accès basé sur les rôles RBAC (Role-Based Access Control).

1. Idée de base : introduire le concept de rôles entre les utilisateurs et les droits d'accès, connecter les utilisateurs et les rôles et contrôler l'accès des utilisateurs aux ressources du système via l'autorisation des rôles par rapport au contrôle d'accès traditionnel. , l'introduction de rôles simplifie grandement la gestion des autorisations. (Apprentissage recommandé : Framework YII )

1). Caractère : Il peut être compris comme un ensemble d'autorisations et d'autorisations. Par exemple : dans un système de forum, « super administrateur » et « modérateur » sont des rôles.

2). Autorisations : Les modérateurs peuvent gérer les publications dans le forum, les utilisateurs dans le forum, etc. Ce sont des autorisations.

Implémentation de rbac dans Yii2

1 Yii2 implémente un RBAC en couches général, et le modèle qu'il suit est également le modèle NIST RBAC.

2. La notion de règle est ajoutée dans yii2. Qu'est-ce qu'une règle ?

Par exemple : pour le système d'articles, nous avons des administrateurs et des utilisateurs ordinaires, qui permettent aux administrateurs d'effectuer toutes opérations sur les articles, mais seuls les utilisateurs ordinaires sont autorisés à créer des articles et à modifier les articles qu'ils créent, c'est-à-dire Les utilisateurs ordinaires ont la permission de modifier les articles, mais la restriction d'Extra est qu'ils ne peuvent modifier que leurs propres articles. Cette vérification d'Extra est responsable des règles.

L'implémentation de gestion des autorisations de 3.yii2 prend en charge deux supports : file et db. Le cœur de l'implémentation basée sur la base de données est constitué de quatre tables :

1) Rôles ou autorisations de stockage. Table : auth_item (type : 1 représente le rôle ; 2 représente l'autorisation)

CREATE TABLE `auth_item` (
`name` varchar(64) NOT NULL,
`type` int(11) NOT NULL,
`description` text,
`rule_name` varchar(64) DEFAULT NULL,
`data` text,
`created_at` int(11) DEFAULT NULL,
`updated_at` int(11) DEFAULT NULL,
PRIMARY KEY (`name`),
KEY `rule_name` (`rule_name`),
KEY `type` (`type`),
CONSTRAINT `auth_item_ibfk_1` FOREIGN KEY (`rule_name`) REFERENCES `auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

2) La table d'association supérieure et subordonnée des autorisations et des rôles : auth_item_child

(comprend le relation : les rôles peuvent contenir des rôles, les rôles peuvent contenir des autorisations, les autorisations peuvent contenir des autorisations, mais les autorisations ne peuvent pas contenir de rôles)

CREATE TABLE `auth_item_child` (
`parent` varchar(64) NOT NULL,
`child` varchar(64) NOT NULL,
PRIMARY KEY (`parent`,`child`),
KEY `child` (`child`),
CONSTRAINT `auth_item_child_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `auth_item_child_ibfk_2` FOREIGN KEY (`child`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

3) Tableau d'attribution des utilisateurs et des autorisations (rôles) : auth_assignment

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 `auth_assignment_ibfk_1` FOREIGN KEY (`item_name`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

4) Table de règles : auth_rule

CREATE TABLE `auth_rule` (  
  `name` varchar(64) NOT NULL,  
  `data` text,  //存的是一个序列化的实现了yii\rbac\Rule接口的类的一个对象实例
  `created_at` int(11) DEFAULT NULL,  
  `updated_at` int(11) DEFAULT NULL,  
  PRIMARY KEY (`name`),  
  KEY `name` (`name`),  
  KEY `created_at` (`created_at`),  
  KEY `updated_at` (`updated_at`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='权限规则表';

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