Yii Framework 2 Droits personnalisés

Yii framework 2 - droits d'utilisateur à travers la base de données.

Nous créons un contrôleur dont tous les contrôleurs seront alors hérités et beforeAction - une méthode qui sera exécutée avant l'action.

PS: les modèles et CRUD doivent être générés à l'aide du module Gii.

<?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ namespace app\helper; use yii\web\Controller; use app\models\Users; use app\models\Rights; use Yii; class AppController extends Controller{ public function beforeAction($action){ $controller = $action->controller->id; //$action = $action->id; $rights = Rights::find()->where('controller = :controller', [':controller' => $controller])->one(); if(is_null($rights)){ echo 'controller dont have a rights'; exit; } $roles = explode(",",$rights->rights); $access = false; $userRole = "guest"; if(!\Yii::$app->user->isGuest){ $id = \Yii::$app->user->id; $user = Users::find()->where('id = :id', [':id' => $id])->one(); $userRole = $user->righgts; } foreach ($roles as $role){ if($role == $userRole){ $access = true; } } if(!$access){ $this->redirect(array('/site/login')); exit; } return parent::beforeAction($action); } } 

Modèle et tableau des droits:

 CREATE TABLE `rights` ( `id` int(11) NOT NULL AUTO_INCREMENT, `controller` varchar(255) NOT NULL, `action` varchar(255) NOT NULL, `rights` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 

Le modèle et le tableau des utilisateurs, la particularité est qu'il y a un champ droit:

 CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL, `phone` varchar(22) NOT NULL, `password` varchar(64) NOT NULL, `righgts` varchar(60) NOT NULL, `verify_key` varchar(65) NOT NULL, `activated` int(11) NOT NULL, `recovery_key` varchar(65) NOT NULL, `recovery_key_life` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `auth_key` varchar(255) NOT NULL, `accessToken` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=37 DEFAULT CHARSET=utf8 

Dans le tableau des utilisateurs, nous avons la possibilité de modifier le champ des droits, qui est responsable des droits d'accès aux actions du contrôleur.

image

Dans le tableau des droits, nous écrivons: le contrôleur, l'action et les rôles (droits, droits) qui y ont accès.

image

Algorithme:

  1. Le contrôleur parent vérifie les droits des utilisateurs dans la base de données (colonne des droits).
  2. Le contrôleur parent obtient le nom du contrôleur appelé et le nom de l'action appelée.
  3. Le contrôleur parent accède à la table des droits et vérifie quels droits sont nécessaires pour utiliser le contrôleur et l'action appelés.
  4. Si les droits d'utilisateur correspondent aux droits de la table des droits, l'action est exécutée; sinon, la redirection est effectuée.

Liste les droits dans la table des droits séparés par des virgules.

Il est bon d'utiliser cette méthode dans le module administrateur, car les droits standard de la partie utilisateur conviennent.

Je ne suis pas un maître de la rédaction d'articles et de l'expression de ma beauté, je viens de décrire l'essence technique, veuillez mettre un plus - j'écrirai beaucoup de choses intéressantes.

Source: https://habr.com/ru/post/fr463057/


All Articles