Yii2-user от dektrium и роль при регистрации
Yii2-user от dektrium и роль при регистрации
Здравствуйте!
Установил модуль Yii2-user от dektrium (https://yii2-user.dektrium.com/) на сайт!
Но он при регистрации юзера не создает ему роль, а просто добавляет в таблицу данные, а в таблицу auth_assignment не вносит связь с ролью.
У меня на сайте есть роль admin - это для админки юзеров для бекенда, и на фронтенде роль author и мне надо чтоб это роль была при регистрации.
В сам модуль лесть не хочется и дописывать в нем, так как он уже готовый устанавливается с композера, и каждый раз после установки дописывать не хочется. Подскажите как эту роль реализовать
Установил модуль Yii2-user от dektrium (https://yii2-user.dektrium.com/) на сайт!
Но он при регистрации юзера не создает ему роль, а просто добавляет в таблицу данные, а в таблицу auth_assignment не вносит связь с ролью.
У меня на сайте есть роль admin - это для админки юзеров для бекенда, и на фронтенде роль author и мне надо чтоб это роль была при регистрации.
В сам модуль лесть не хочется и дописывать в нем, так как он уже готовый устанавливается с композера, и каждый раз после установки дописывать не хочется. Подскажите как эту роль реализовать
Сайт по работе в Украине: https://jobis.com.ua/. Сайт по поиску строителей: https://stroyzakaz.com.ua/
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Re: Yii2-user от dektrium и роль при регистрации
1. Открываем RegistrationController и видим события EVENT_AFTER_REGISTER и EVENT_AFTER_CONFIRM.
2. Подписываем свой обработчик на эти события. Например, через controllerMap модуля, как описано в пункте Using controllers events.
3. В обработчике прописываем Yii::$app->authManager->assign(...).
2. Подписываем свой обработчик на эти события. Например, через controllerMap модуля, как описано в пункте Using controllers events.
3. В обработчике прописываем Yii::$app->authManager->assign(...).
Последний раз редактировалось ElisDN 2016.08.03, 08:43, всего редактировалось 2 раза.
Re: Yii2-user от dektrium и роль при регистрации
Спасибо за подсказку, но подскажите еще, вот код я сделал:ElisDN писал(а): 3. В обработчике прописываем Yii::$app->authManager->assign(...).
Код: Выделить всё
'user' => [
'class' => 'dektrium\user\Module',
'controllerMap' => [
'registration' => [
'class' => \dektrium\user\controllers\RegistrationController::className(),
'on ' . \dektrium\user\controllers\RegistrationController::EVENT_AFTER_REGISTER => function ($e) {
$auth = Yii::$app->authManager;
$role = $auth->getRole('author');
$auth->assign($role, $e->id);
}
],
],
],
Сайт по работе в Украине: https://jobis.com.ua/. Сайт по поиску строителей: https://stroyzakaz.com.ua/
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-user от dektrium и роль при регистрации
Yii::$app->user->id не пробовали?
Re: Yii2-user от dektrium и роль при регистрации
выдает ошибку:Loveorigami писал(а):Yii::$app->user->id не пробовали?
Код: Выделить всё
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null
The SQL being executed was: INSERT INTO `auth_assignment` (`user_id`, `item_name`, `created_at`) VALUES (NULL, 'admin', 1470161055)
Error Info: Array
(
[0] => 23000
[1] => 1048
[2] => Column 'user_id' cannot be null
)
Сайт по работе в Украине: https://jobis.com.ua/. Сайт по поиску строителей: https://stroyzakaz.com.ua/
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-user от dektrium и роль при регистрации
Понятно.
Id не видит, потому что в event id не попадает
https://github.com/dektrium/yii2-user/b ... onForm.php
Id не видит, потому что в event id не попадает
https://github.com/dektrium/yii2-user/b ... onForm.php
Re: Yii2-user от dektrium и роль при регистрации
так что предлагаете класс переделывать или периприсвоить его и поменять кое что? но это мне кажется не правильный вариантLoveorigami писал(а):Понятно.
https://github.com/dektrium/yii2-user/b ... onForm.php
Сайт по работе в Украине: https://jobis.com.ua/. Сайт по поиску строителей: https://stroyzakaz.com.ua/
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-user от dektrium и роль при регистрации
Доку внимательно читать
Код: Выделить всё
Alternative: Class based-events
You can also assign events on class-level.
\yii\base\Event::on(
\dektrium\user\controllers\RegistrationController::className(),
\dektrium\user\controllers\RegistrationController::EVENT_AFTER_CONFIRM,
function () {
Yii::info('Assigning default roles to user...');
// implement role assignment(s)
}
);
Re: Yii2-user от dektrium и роль при регистрации
А можно подсказку как мне сделать? я смотрел доки, но не понял.Loveorigami писал(а):Доку внимательно читать
Если не сложно то киньте строчку кода
Сайт по работе в Украине: https://jobis.com.ua/. Сайт по поиску строителей: https://stroyzakaz.com.ua/
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Re: Yii2-user от dektrium и роль при регистрации
В EVENT_AFTER_REGISTER в $event попадает сама форма. Сам $user попадает только в EVENT_AFTER_CONFIRM.
Либо находим пользователя через:
в обработчике EVENT_AFTER_REGISTER, либо берём самого пользователя $event->user в EVENT_AFTER_CONFIRM.
Либо находим пользователя через:
Код: Выделить всё
$user = User::findOne(['username' => $event->form->username])
Re: Yii2-user от dektrium и роль при регистрации
Сделал вот так и работает:ElisDN писал(а): в обработчике EVENT_AFTER_REGISTER, либо берём самого пользователя $event->user в EVENT_AFTER_CONFIRM.
Код: Выделить всё
'controllerMap' => [
'registration' => [
'class' => \dektrium\user\controllers\RegistrationController::className(),
'on ' . \dektrium\user\controllers\RegistrationController::EVENT_AFTER_REGISTER => function ($event) {
$auth = Yii::$app->authManager;
$role = $auth->getRole('admin');
$user = \dektrium\user\models\User::findOne(['username' => $event->form->username]);
$auth->assign($role, $user->id);
}
],
],
Сайт по работе в Украине: https://jobis.com.ua/. Сайт по поиску строителей: https://stroyzakaz.com.ua/
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Re: Yii2-user от dektrium и роль при регистрации
По коду $user передаётся только в EVENT_AFTER_CONFIRM. В EVENT_AFTER_REGISTER попадает только форма в $event->form, которая из register() зарегистрированную модель $user не возвращает. Решение - либо навешиваться на EVENT_AFTER_CONFIRM, либо переписать контроллер, чтобы он заполнял $form и $user для EVENT_AFTER_REGISTER, либо навешиаться глобально не на контроллер, а на User::AFTER_REGISTER:webplus писал(а):мне кажется что можно как то id юзера получить сразу, не через запрос к модели с передачей $event->form->username . Может есть еще какое то более гибкое решание
Код: Выделить всё
Event::on(User::className(), User::AFTER_REGISTER, function (Event $event) {
$user = $event->sender;
...
}
Re: Yii2-user от dektrium и роль при регистрации
Пробовал вот так, навесить на User::AFTER_REGISTER, но не работает, вылазит ошибка:ElisDN писал(а):webplus писал(а):либо навешиаться глобально не на контроллер, а на User::AFTER_REGISTER:
Код: Выделить всё
'controllerMap' => [
'registration' => [
'class' => \dektrium\user\models\User::className(),
'on ' . \dektrium\user\models\User::AFTER_REGISTER => function ($event) {
$auth = Yii::$app->authManager;
$role = $auth->getRole('admin');
$auth->assign($role, $event->id);
}
],
],
Сайт по работе в Украине: https://jobis.com.ua/. Сайт по поиску строителей: https://stroyzakaz.com.ua/
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Re: Yii2-user от dektrium и роль при регистрации
Здесь controllerMap не нужен, так как он только для контроллеров. Нужно выполнить именно код с Event::on в Bootstrap-классе.webplus писал(а):Вижу это же для controllerMap и тут не модель нужна, а контроллер!
Re: Yii2-user от dektrium и роль при регистрации
как вы решили данную проблему?
Re: Yii2-user от dektrium и роль при регистрации
вот так:ilma55 писал(а):как вы решили данную проблему?
Код: Выделить всё
'controllerMap' => [
'registration' => [
'class' => \dektrium\user\controllers\RegistrationController::className(),
'on ' . \dektrium\user\controllers\RegistrationController::EVENT_AFTER_REGISTER => function ($event) {
$auth = Yii::$app->authManager;
$role = $auth->getRole('admin');
$user = \dektrium\user\models\User::findOne(['username' => $event->form->username]);
$auth->assign($role, $user->id);
}
],
],
Сайт по работе в Украине: https://jobis.com.ua/. Сайт по поиску строителей: https://stroyzakaz.com.ua/
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Re: Yii2-user от dektrium и роль при регистрации
я думал как-то так. а то я ничего не понял про это решениеНужно выполнить именно код с Event::on в Bootstrap-классе.
Re: Yii2-user от dektrium и роль при регистрации
если кому нить еще надо, то я навесил именно на confirm
Код: Выделить всё
'on ' . \dektrium\user\controllers\RegistrationController::EVENT_AFTER_CONFIRM => function ($e) {
$auth = Yii::$app->authManager;
$user = \dektrium\user\models\Profile::find()->select('acctype')->where(['user_id' => $e->user->id])->asArray()->one();
$role = $auth->getRole($user['acctype']);
$auth->assign($role, $e->user->id);
Yii::$app->response->redirect(array('/login'))->send();
Yii::$app->end();
}
Re: Yii2-user от dektrium и роль при регистрации
Здравствуйте, подскажите, как в этом модуле можно реализовать переход в личный кабинет сразу после регистрации
Re: Yii2-user от dektrium и роль при регистрации
Аналогично сделать:Tivos писал(а):Здравствуйте, подскажите, как в этом модуле можно реализовать переход в личный кабинет сразу после регистрации
Код: Выделить всё
Yii::$app->user->login($event->user);
Yii::$app->response->redirect(['/cabinet/index'])->send();
Yii::$app->end();