Kerangka kerja Yii 2 hak khusus

Kerangka kerja Yii 2 - hak pengguna melalui database.

Kami membuat pengontrol tempat semua pengontrol akan diwarisi dan beforeAction - metode yang akan dijalankan sebelum tindakan.

PS: model dan CRUD harus dibuat menggunakan modul 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); } } 

Tabel model dan hak:

 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 

Tabel model dan pengguna, kekhasannya adalah bahwa ada bidang righgts:

 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 

Di tabel pengguna, kami memiliki kemampuan untuk mengubah bidang hak, yang bertanggung jawab atas hak akses ke tindakan pengontrol.

gambar

Dalam tabel hak kami menulis: controller, aksi dan peran (hak, hak) yang memiliki akses ke sana.

gambar

Algoritma:

  1. Pengontrol induk memeriksa hak pengguna dari database (kolom hak).
  2. Pengontrol induk mendapatkan nama pengontrol yang dipanggil dan nama tindakan yang dipanggil.
  3. Kontroler induk mengakses tabel hak dan memeriksa hak-hak apa yang diperlukan untuk menggunakan controller dan aksi yang disebut.
  4. Jika hak pengguna cocok dengan hak dalam tabel hak, maka tindakan dilakukan, jika tidak, pengalihan dilakukan.

Daftar hak di tabel hak dipisahkan oleh koma.

Baik untuk menggunakan metode ini dalam modul administrator, karena hak standar bagian pengguna cocok.

Saya bukan ahli dalam menulis artikel dan mengekspresikan diri dengan indah, saya hanya menguraikan esensi teknis, silakan tambahkan - saya akan menulis banyak hal menarik.

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


All Articles