Версия Laravel: 7.x
Мне нужно разработать приложение, в котором есть 2 основных roles
и несколько sub-roles
, например: administrator
/ manager
, office-admin
и т. Д. И 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,
],
],
В: Можно ли это сделать через общую страницу входа или мне нужно создать несколько страниц входа с URL-адресами?
1 ответ
Я нашел решение. Вот мой последний код:
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');
...
}
Похожие вопросы
Новые вопросы
laravel
Laravel - это бесплатная веб-инфраструктура PHP с открытым исходным кодом, созданная Тейлором Отвеллом и предназначенная для разработки веб-приложений по архитектурному шаблону модель-представление-контроллер (MVC) на основе Symfony. Исходный код Laravel размещен на GitHub и лицензирован в соответствии с условиями лицензии MIT.