Laravel版本:7.x
我需要开发一个应用程序,其中有两个主要的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,
],
],
问:可以通过一个通用的登录页面完成此操作,还是必须使用网址创建多个登录页面?
答案 0 :(得分:0)
我找到了解决方案。这是我的最终代码:
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');
...
}