Множественная аутентификация в Laravel 5.3

Как настроить множественную аутентификацию в Laravel 5.3 для двух разных таблиц (пользователей и администратора).

По умолчанию в Laravel есть модель пользователя.


person Mukul Mantosh    schedule 17.09.2016    source источник


Ответы (2)


Похоже, вам нужно реализовать роли. Вы можете использовать пользовательскую модель Laravel по умолчанию, и вам нужно будет создать ролевую модель:

Модель пользователя

...
public function role() {
    return $this->belongsToMany('App\User', 'user_roles', 'role_id', 'user_id');
}

public function inRole($role) {
    return (bool) $this->role()->where('name', '=', $role)->count();
}
...

Образец для подражания

...
public function users() {
    return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');
}
...

Вам нужно будет создать 2 таблицы в дополнение к вашей таблице пользователей:

Table users

id | name
---------
1  | John
2  | Michael

Table roles

id | name
---------
1  | Admin
2  | Member

Table user_roles

id | user_id | role_id
----------------------
1  |    1    |    1   
2  |    2    |    1

Теперь вы можете реализовать разные разрешения для разных ролей, которые у вас есть. Вы можете определить разрешения с помощью политик или шлюзов. Дополнительную информацию о том, как это сделать, см. в документации.

Теперь, чтобы перенаправить ваших участников в /users/home, а администраторов в /admin/dashboard, вы можете сделать следующее:

Вы определяете adminAccess в своем AuthServiceProvider:

public function boot() {
    $this->registerPolicies();
    ...

    // Define adminAccess
    Gate::define('adminAccess', function ($user) {
        return $user->inRole('admin');
    });
}

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

public function handle($request, Closure $next) {
    if (Auth::check() && Auth::user()->inRole('admin')) {
        return $next($request);
    }

    return redirect('/');
}

Затем зарегистрируйте Middleware в вашем Kernal.php в переменной $routeMiddleware. Затем вы можете поместить все свои административные маршруты в группу и использовать там промежуточное ПО:

Route::group(['middleware' => 'auth']) {
    // Define your routes
}
person Gadzhev    schedule 17.09.2016
comment
Как я могу перенаправить на основе ролей. Пользователь будет перенаправлен на пользователей/домой, а администратор будет перенаправлен на администратора/панель управления, а пользователи, имеющие роли, будут ограничены, поскольку участники не могут просматривать панель администратора. - person Mukul Mantosh; 17.09.2016

Если вам нужна мультиаутентификация на основе охранников, попробуйте этот пакет для laravel 5.3 https://github.com/Hesto/multi-auth

person Hesto    schedule 04.10.2016