Laravel のログインコンフィグ config/auth.php をいじると階層別ログインを実現できます。
例えば、一般ユーザ用、オーナー用、システム管理者用と3つの階層に分けるために
- 一般ユーザ→ モデル: App\User.php テーブル: users
- オーナー → モデル: App\OwnerUser.php テーブル: owner_users
- システム管理者 → モデル: App\Admin.php テーブル admins
とした場合、config/auth.php に以下の記述を追加します。
'guards' => [
'owner' => [ 'driver' => 'session', 'provider' => 'owners' ],
'admin' => [ 'driver' => 'session', 'provider' => 'admins' ],
],
'providers' => [
'owners' => [ 'driver' => 'eloquent', model => App\OwnerUser::class ],
'admins' => [ 'driver' => 'eloquent', model => App\Admin::class ],
],
'passwords' => [
'owners' => [ 'provider' => 'owners', 'table' => 'password_resets', expire => 60 ],
'admins' => [ 'provider' => 'admins', 'table' => 'password_resets', expire => 60 ],
],
それぞれの階層に応じたログイン画面を構成します。URL を仮に /user/login, /owner/login, /admin/login とすると (id, email, password は最低限テーブルに含むとします)、
<form method="post">
<div class="form-group">
<label for="email">Email</label>
<div class="form-control"><input id="email" name="email"></div>
</div>
<div class="form-group">
<label for="password">Password</label>
<div class="form-control"><input id="password" name="password" type="password"></div>
</div>
</form>
routes/web.php は
use App\Http\Controllers\UserLogin;
use App\Http\Controllers\OwnerLogin;
use App\Http\Controllers\AdminLogin;
Route::get('/user/login', [UserLogin::class, 'showLoginForm']);
Route::post('/user/login', [UserLogin::class, 'login']);
Route::get('/owner/login', [OwnerLogin::class, 'showLoginForm']);
Route::post('/owner/login', [OwnerLogin::class, 'login']);
Route::get('/admin/login', [AdminLogin::class, 'showLoginForm']);
Route::post('/admin/login', [AdminLogin::class, 'login']);
UserLogin クラスは以下のようになります。
class UserLogin extends Controller {
use AuthenticatesUsers;
// ①
protected $redirectTo = "/users/mypage";
public function __construct() {
parent::__construct();
// ②
$this->middleware('guest')->except('logout');
}
public function showLoginForm() {
// ③
return view('users.login');
}
public function guard() {
// ④
return Auth::guard('user');
}
public function logout(Requests $requests) {
// ⑤
Auth::guard('user')->logout();
}
}
OwnerLogin, AdminLogin に対応するには、①~④までを以下のように置き換えます。
番号 | Owner | Admin |
① | “/owner/mypage” | “admin/mypage” |
② | middleware(‘guest:owner’) | middleware(‘guest:admin’) |
③ | view(‘owners.login’) | view(‘admins.login’) |
④ | guard(‘owner’) | guard(‘admin’) |
⑤ | guard(‘owner’) | guard(‘admin’) |
auth() の結果は以下のようになります。
URL | auth() |
/user/mypage | User インスタンス |
/owner/mypage | OwnerUser インスタンス |
/admin/mypage | AdminUser インスタンス |
コメントを残す