If you want them to be really separated you can do the second approach where you have multiple tables representing different authenticatable models.
Laravel has some built in functionality with this.
Here is a good tutorial I found https://devmarketer.io/learn/setting-multi-authentication-laravel-5-4-part-1/
The important part is this:
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'admin-api' => [
'driver' => 'token',
'provider' => 'admins',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
In your config you setup multiple providers and guards. Then you can have separate logins and use the guard method to specify who you are trying to login..
if (Auth::guard('admin')->attempt($credentials)) {
// etc...
}
EDIT: Or you can just do what martinbean said and have a single users table and create a role column. It depends on how separate you want the logins to be. However I typically do it as martinbean says and just add a role column.