Назначьте указанные c роли, с которых пользователь нажимает - PullRequest
0 голосов
/ 27 января 2020

Я хотел бы назначить роли в зависимости от того, на какую кнопку нажимает пользователь:

botones para redirigir

Например: - Если вы нажмете, я хочу быть советник, перенаправьте на Laravel регистрационную форму и назначьте роль советника. - Если пользователь нажимает кнопку «Я хочу стать покупателем», он перенаправляет на регистрационную форму Laravel и назначает роль покупателя.

Но я не знаю, как это сделать. У меня есть этот код в моем 'RegisterController':

protected function create(array $data)
{
    $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
       //'password' => Hash::make($data['password']), //mutador en User model
        'password' => $data['password'],
        'surname1' => $data['surname1'],
        'surname2' => $data['surname2'],
        'comunidad_id' => $data['cbx_comunidad'],
        'provincia_id' => $data['cbx_provincia'],  
        'municipio_id' => $data['cbx_municipio'],
    ]);

    //dd(Request::url());
    // $user->assignRole('Asesor');
    //quiero asignar varios roles depende de el botón que clicken

    return $user;

}

На данный момент, я сделал, чтобы добавить такой параметр, в представлении, которое вызывает представление 'register':

href="{{ route('register','Asesor') }}"

и в представлении 'регистрация' отправьте его по почте в скрытом виде:

<div class="form-group">
<?php
  $pos = strpos(Request::fullUrl(), '?');                       
  $cadena = substr (Request::fullUrl() , $pos+1, strlen(Request::fullUrl()) );                                                
?>
  <input type="hidden" name="role" id="role" value="{{ $cadena }}">
</div>

Затем в контроллере я делаю это:

if ($data['role'] == 'Asesor=')
{
   $user->assignRole('Asesor');
}
return $user;

Но я не знаю если это правильный путь.

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Я думаю, вы можете работать с такими событиями: В своем классе EventServiceProvider создайте элемент внутри вашего свойства $ listen:

'App\Events\User\Created' => ['App\Listeners\User\AssignRoles'],

После этого вы собираетесь запустить команду:

php artisan event:generate

Теперь вам нужно включить это событие в своем классе User, объявив защищенное свойство $ dispatchesEvents, например так:

protected $dispatchesEvents = ['created' => 'App\Events\User\Created'];

После всего вызова метода create в вашем классе User, событие create будет вызываться и запускать AssignRoles logi c.

В вашем классе App \ Events \ User \ Created вам нужно внедрить User в метод __construct, например:

public $user;

public function __construct(User $user)
{
    $this->user = $user;
}

Не забудьте указать полный путь к классу User!

Это объект, который будет заполнен данными, поступающими из метода User :: create.

Внутри слушателя AssignRoles у вас есть событие связан с заполненным пользователем, и вы можете получить его следующим образом:

public function handle(Created $event)
{
    $event->user;
    // ...
}

Внутри AssignRoles слушателя вы можете получить все требуемые параметры в вашем __construct:

private $request;
public function __construct(Illuminate\Http\Request $request)
{
    $this->request      = $request;
}

Имея запрошенные параметры в вашей руке, вы можете применить логи c в зависимости от нажатой кнопки внутри метода дескриптора:

public function handle(Created $event)
{
    $event->user;
    // here is the best place to do all the logic about roles that is going to be attached in this user. E.g:
    switch($role = $this->request->role) {
        case $role == 'Asesor':
            $event->user->roles()->assignRole('Asesor');
        break;
        case $role == 'Buyer':
            $event->user->roles()->assignRole('Buyer');
        break;
    }
}

Чтобы отправить параметр роли в Запрос, вам нужно создать форму со скрытым элементом,

<input type='hidden' name='role' />

создать более одной кнопки отправки для заполнения роли скрытого элемента

<input type='submit' value='I want to be an Advisor' onClick='setRole("Advisor")' />

<input type='submit' value='I want to be a Buyer' onClick='setRole("Buyer")' />

И, наконец, вам нужен метод logi c для setRole js. Хорошо выглядишь ; -)

0 голосов
/ 27 января 2020

Для назначения роли пользователю.

Функция контроллера будет такой же.

 /* assign role */

        if(is_array($request['role']))
        {
            foreach($request['role'] as $d)
            {
                $user->roles()->attach(Role::where('id',$d)->first());
            }

        }

       return redirect()->route();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...