Пользовательские Права Yii Framework 2

Yii framework 2 — права пользователя через базу данных.

Создаём контроллер, от которого потом будут наследоваться все контроллеры и beforeAction — метод, который будет выполняться перед действием.

P.S.: Модели и CRUD должны быть сгенерированы с использованием модуля 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); } }

Таблица моделей и прав:

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

Пользователи модели и таблицы, особенность в том, что есть поле прав:

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

В таблице пользователей у нас есть возможность изменить поле прав, отвечающее за права доступа к действиям контроллера.



Пользовательские права Yii framework 2

В таблицу прав записываем: контроллер, действие и роли (права), которые имеют к ним доступ.



Пользовательские права Yii framework 2

Алгоритм:

  1. Родительский контроллер проверяет права пользователя по базе данных (столбец прав).

  2. Родительский контроллер получает имя вызываемого контроллера и имя вызываемого действия.

  3. Родительский контроллер обращается к таблице прав и проверяет, какие права необходимы для использования вызываемого контроллера и действия.

  4. Если права пользователя совпадают с правами в таблице прав, то действие выполняется; если нет, то выполняется перенаправление.

Перечислите права в таблице прав, разделив их запятыми.

Этот метод хорошо использовать в модуле администратора; для пользовательской части подходят стандартные права.

Я не мастер писать статьи и красиво изъясняться, просто изложил техническую суть, поставьте пожалуйста плюс - напишу еще много интересного.

Теги: #php #Yii #yii 2 #yii 2 права

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.