Direitos personalizados da estrutura 2 do Yii

Yii framework 2 - direitos do usuário através do banco de dados.

Criamos um controlador a partir do qual todos os controladores serão herdados e beforeAction - um método que será executado antes da ação.

PS: modelos e CRUDs devem ser gerados usando o módulo 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); } } 

Modelo e tabela de direitos:

 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 

O modelo e a tabela de usuários, a peculiaridade é que há um campo de direitos:

 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 

Na tabela de usuários, temos a capacidade de alterar o campo de direitos, responsável pelos direitos de acesso às ações do controlador.

imagem

Na tabela de direitos que escrevemos: o controlador, ação e funções (direitos, direitos) que têm acesso a eles.

imagem

Algoritmo:

  1. O controlador pai verifica os direitos do usuário no banco de dados (coluna de direitos).
  2. O controlador pai obtém o nome do controlador chamado e o nome da ação chamada.
  3. O controlador pai acessa a tabela de direitos e verifica quais direitos são necessários para usar o chamado controlador e ação.
  4. Se os direitos do usuário corresponderem aos direitos na tabela de direitos, a ação será executada; caso contrário, o redirecionamento será executado.

Listar direitos na tabela de direitos separados por vírgulas.

É bom usar esse método no módulo do administrador, pois os direitos padrão da parte do usuário são adequados.

Não sou mestre em escrever artigos e me expressar lindamente; acabei de descrever a essência técnica, por favor, acrescente uma vantagem - escreverei muitas coisas interessantes.

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


All Articles