Gleich vorweg! Im Laravel Model gibt es mehrere protected Klassenvariablen die durch die Vererbung von Models bzw. Authenticatable im eigenen Model verfügbar sind. So habt ihr bestimmt schon mit protected $fillable und protected $guarded oder protected $hidden zu tun gehabt?
Leicht zu verwechseln mit $guarded ist nun $guard. Allerdings schützt $guarded nur das Model vor Mass Assignment. Also für unerwünschten modifizieren / updated oder erstellen eines Datenbankeintrages für die Tabelle für welches das Model steht. Hier eine genaue Erklärung zum Thema Mass Assignment.
Die Member $guard allerdings wird bei der Authentifizierung / Authentification benötigt. Sie gibt an welcher Guard für dieses Model zuständig ist. Es gibt bei Laravel von Hause aus zwei Guards. Ihr findet sie definiert in der config/auth.php.
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
// neuer Guard
'customer' => [
'driver' => 'session',
'provider' => 'customers',
],
[...]
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
// neuer Provider
'customers' => [
'driver' => 'eloquent',
'model' => App\Models\Customer::class,
],
Wie ihr bereits am Code erkennt, habe ich im Beispiel ein Multiple Login. Soll heißen, einmal für die Kunden und einmal für die Admins / Mitarbeiter (users) eines Laravel angelehnten Shops.
Wenn sich ein Kunde nun einloggt wird seine Anfrage an den LoginController weitergeleitet. Im Constructor des LoginControllers bestimmen wir mit welchem Authentifizierungs Guard er die Anfrage kontrollieren soll.
class LoginController extends Controller
{
[...]
public function __construct()
{
$this->middleware('guest:customer')->except('logout');
}
[...]
}