Laravel: мультиавт с общей страницей входа - PullRequest
0 голосов
/ 14 апреля 2020

Laravel версия: 7.x

Мне нужно разработать приложение, в котором есть 2 основных roles и несколько sub-roles, например: administrator / manager, office-admin, et c. и company / field-agent, front-desk. Где administrator является владельцем сайта, а company является franchise.

Таблицы:

users         ->        user_staff
|- id                   |- id
|- email                |- user_id
|- password             |- email
|- ...                  |- password
                        |- ...

companies     ->        employees
|- id                   |- id
|- email                |- company_id
|- password             |- email
|- ...                  |- password
                        |- ...

После входа в систему все они попадают в общую область администратора (http://www.sitename.com/admin/) со своими соответствующими role ограничениями.

Для управления этим сценарием Я создал 4 разных охранников. admin, staff, company & employee.

Auth. php

'guards' => [
    'admin' => [
        'driver'   => 'session',
        'provider' => 'users',
    ],
    'staff' => [
        'driver'   => 'session',
        'provider' => 'staff',
    ],
    'company' => [
        'driver'   => 'session',
        'provider' => 'company',
    ],
    'employee' => [
        'driver'   => 'session',
        'provider' => 'employee',
    ],
],
'providers' => [
    'admin' => [
        'driver' => 'eloquent',
        'model'  => App\User::class,
    ],
    'staff' => [
        'driver' => 'eloquent',
        'model'  => App\UserStaff::class,
    ],
    'company' => [
        'driver' => 'eloquent',
        'model'  => App\Company::class,
    ],
    'employee' => [
        'driver' => 'eloquent',
        'model'  => App\Employee::class,
    ],
],

Q: Это можно сделать через общую страницу входа или мне нужно создать несколько страниц входа с URL?

1 Ответ

0 голосов
/ 26 апреля 2020

Я нашел решение. Вот мой окончательный код:

LoginController. php

public function login()
{
    # validating posted data
    $auth = $this->validator(request()->all())->validate();
    $success = false;

    # validating credentials
    foreach ([ 'admin', 'staff', 'company', 'employee' ] as $key => $guard)
    {
        if(\Auth::guard($guard)->attempt($auth, false))
        {
            $success = true;
            break;
        }
    }

    # redirecting with error(s)
    if($success == false)
        return redirect()
            ->route('admin.login')
            ->withInput()
            ->with('error', config('messages.auth.login.failed.message'));

    # redirecting to intended page
    return redirect()->route('admin.dashboard');
}

Controller. php

public function __construct()
{
    /**
     * Middleware(s)
     */
    $this->middleware('auth:admin,staff,company,employee');

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...