Benutzerdefinierte Rechte für Yii Framework 2

Yii Framework 2 - Benutzerrechte über die Datenbank.

Wir erstellen einen Controller, von dem alle Controller geerbt werden und beforeAction - eine Methode, die vor der Aktion ausgeführt wird.

PS: Modelle und CRUDs müssen mit dem Gii-Modul generiert werden.

<?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); } } 

Modell- und Rechtstabelle:

 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 

Die Modell- und Benutzertabelle, die Besonderheit ist, dass es ein Rechtfeld gibt:

 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 

In der Benutzertabelle können wir das Feld Rechte ändern, das für die Zugriffsrechte auf Controller-Aktionen verantwortlich ist.

Bild

In die Rechtetabelle schreiben wir: den Controller, die Aktion und die Rollen (Rechte, Rechte), die Zugriff darauf haben.

Bild

Algorithmus:

  1. Der übergeordnete Controller überprüft Benutzerrechte aus der Datenbank (Spalte Rechte).
  2. Der übergeordnete Controller erhält den Namen des aufgerufenen Controllers und den Namen der aufgerufenen Aktion.
  3. Der übergeordnete Controller greift auf die Rechtetabelle zu und prüft, welche Rechte erforderlich sind, um den aufgerufenen Controller und die Aktion zu verwenden.
  4. Wenn die Benutzerrechte mit den Rechten in der Rechtetabelle übereinstimmen, wird die Aktion ausgeführt. Wenn nicht, wird die Umleitung ausgeführt.

Listen Sie die Rechte in der durch Kommas getrennten Rechtetabelle auf.

Es ist gut, diese Methode im Administratormodul zu verwenden, da für den Benutzerteil Standardrechte geeignet sind.

Ich bin kein Meister darin, Artikel zu schreiben und mich wunderschön auszudrücken. Ich habe nur die technische Essenz skizziert. Bitte setzen Sie ein Plus - ich werde viele interessante Dinge schreiben.

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


All Articles