При использовании систем RBAC возникает вопрос о хранениии и получении доступа к данным пользователя в приложении (например: дата рождения, место работы, ФИО, стаж и др.).
В работе будем использовать webvimark/user-management.
Для примера, создадим таблицы core_teacher
и core_learner
и AR-модели:
$this->createTable('core_teacher', [
'id' => $this->primaryKey(),
'user_id' => $this->integer()->notNull()->comment('id пользователя'),
'name' => $this->string()->notNull()->comment('ФИО'),
'description' => $this->string()->notNull()->comment('Описание'),
'rating' => $this->float()->defaultValue(0)->comment('Рейтинг')
]);
$this->createTable('core_learner', [
'id' => $this->primaryKey(),
'user_id' => $this->integer()->notNull()->comment('id пользователя'),
'name' => $this->string()->notNull()->comment('ФИО'),
'class' => $this->string()->comment('Класс')
]);
Добавим 2 модуля, через CRUD:
- модуль для учителя (личный кабинет учителя)
- модуль для ученика (личный кабинет ученика)
Добавим компонент TeacherComponent
:
<?php
namespace app\modules\teacher\components;
use app\models\AR\CoreTeacher;
use yii\base\Component;
class TeacherComponent extends Component
{
public $teacher = null;
public function __construct(array $config = [])
{
$this->teacher = CoreTeacher::findOne(['user_id' => \Yii::$app->user->id]);
parent::__construct($config);
}
/**
* @return CoreTeacher
*/
public function get()
{
return $this->teacher;
}
/**
* @return int
*/
public function getId()
{
return $this->teacher->id;
}
}
и зарегистрируем его в config.php
:
$config = [
...
'bootstrap' => [
'log',
'teacher'
],
...
'components' => [
'teacher' => [
'class' => 'app\modules\teacher\components\TeacherComponent',
],
...
В app\modules\teacher\Module.php
добавим проверку:
if (!\Yii::$app->teacher->get()) {
throw new NotFoundHttpException('Доступ к модулю запрещен');
}
Аналогичные действия производим с компонентом LearnerComponent
.
Теперь в любом месте программы мы можем обратиться к данным teacher следующим образом:
$teacher = \Yii::$app->teacher->get();
Также, если определить роли и разрешения, можно после авторизации на сайте автоматически редиректить пользователя в нужный модуль:
'components' => [
...
'user' => [
'class' => 'webvimark\modules\UserManagement\components\UserConfig',
'on afterLogin' => function($event) {
if (\webvimark\modules\UserManagement\models\User::hasPermission('teacher_cabinet', false)) {
Yii::$app->response->redirect('/teacher');
Yii::$app->end();
}
if (\webvimark\modules\UserManagement\models\User::hasPermission('learner_cabinet', false)) {
Yii::$app->response->redirect('/learner');
Yii::$app->end();
}
}
],
...
{{ 'Comments (%count%)' | trans {count:count} }}
{{ 'Comments are closed.' | trans }}