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
В таблице пользователей у нас есть возможность изменить поле прав, отвечающее за права доступа к действиям контроллера.
В таблицу прав записываем: контроллер, действие и роли (права), которые имеют к ним доступ.
Алгоритм:
- Родительский контроллер проверяет права пользователя по базе данных (столбец прав).
- Родительский контроллер получает имя вызываемого контроллера и имя вызываемого действия.
- Родительский контроллер обращается к таблице прав и проверяет, какие права необходимы для использования вызываемого контроллера и действия.
- Если права пользователя совпадают с правами в таблице прав, то действие выполняется; если нет, то выполняется перенаправление.
Этот метод хорошо использовать в модуле администратора; для пользовательской части подходят стандартные права.
Я не мастер писать статьи и красиво изъясняться, просто изложил техническую суть, поставьте пожалуйста плюс - напишу еще много интересного.
Теги: #php #Yii #yii 2 #yii 2 права
Вместе с данным постом часто просматривают:
-
Мгновенный Доступ К Основным Факсам
19 Oct, 24 -
Тест-Драйв Цифровой Ручки Dadget Mt6080
19 Oct, 24 -
Скрытая Комиссия Яндекс.денег В Samsung Pay
19 Oct, 24 -
Корпоративный Презерватив
19 Oct, 24 -
«Письмо Для Тебя!»
19 Oct, 24 -
Фотографии Профиля Google
19 Oct, 24