71 lines
2.3 KiB
PHP
71 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Auth;
|
|
|
|
use App\Models\UserDosen;
|
|
use App\Models\UserStaff;
|
|
use Illuminate\Auth\EloquentUserProvider;
|
|
use Illuminate\Contracts\Auth\Authenticatable;
|
|
use Illuminate\Contracts\Auth\UserProvider;
|
|
use Illuminate\Contracts\Hashing\Hasher as HasherContract;
|
|
|
|
class DualUserProvider implements UserProvider
|
|
{
|
|
private EloquentUserProvider $dosenProvider;
|
|
|
|
private EloquentUserProvider $staffProvider;
|
|
|
|
public function __construct(HasherContract $hasher)
|
|
{
|
|
$this->dosenProvider = new EloquentUserProvider($hasher, UserDosen::class);
|
|
$this->staffProvider = new EloquentUserProvider($hasher, UserStaff::class);
|
|
}
|
|
|
|
public function retrieveById($identifier): ?Authenticatable
|
|
{
|
|
return $this->dosenProvider->retrieveById($identifier)
|
|
?? $this->staffProvider->retrieveById($identifier);
|
|
}
|
|
|
|
public function retrieveByToken($identifier, $token): ?Authenticatable
|
|
{
|
|
return $this->dosenProvider->retrieveByToken($identifier, $token)
|
|
?? $this->staffProvider->retrieveByToken($identifier, $token);
|
|
}
|
|
|
|
public function updateRememberToken(Authenticatable $user, $token): void
|
|
{
|
|
if ($user instanceof UserDosen) {
|
|
$this->dosenProvider->updateRememberToken($user, $token);
|
|
return;
|
|
}
|
|
|
|
$this->staffProvider->updateRememberToken($user, $token);
|
|
}
|
|
|
|
public function retrieveByCredentials(array $credentials): ?Authenticatable
|
|
{
|
|
return $this->dosenProvider->retrieveByCredentials($credentials)
|
|
?? $this->staffProvider->retrieveByCredentials($credentials);
|
|
}
|
|
|
|
public function validateCredentials(Authenticatable $user, array $credentials): bool
|
|
{
|
|
if ($user instanceof UserDosen) {
|
|
return $this->dosenProvider->validateCredentials($user, $credentials);
|
|
}
|
|
|
|
return $this->staffProvider->validateCredentials($user, $credentials);
|
|
}
|
|
|
|
public function rehashPasswordIfRequired(Authenticatable $user, array $credentials, bool $force = false): void
|
|
{
|
|
if ($user instanceof UserDosen) {
|
|
$this->dosenProvider->rehashPasswordIfRequired($user, $credentials, $force);
|
|
return;
|
|
}
|
|
|
|
$this->staffProvider->rehashPasswordIfRequired($user, $credentials, $force);
|
|
}
|
|
}
|