Można zrobić ban dostępu na poziome serwera http - ale dla wszystkich - bez względu na użytkownika.
Aby banować per user trzeba zmienić kod PHP. A że my nie przewidzieliśmy takiej funkcji, trzeba będzie to zrobić po każdej aktualizacji EPESI.
Edytujemy plik modules/Base/User/Login/LoginCommon_0.php linia 161 (github)
Podmieniamy linię:
$param = $login ? md5($login . $_SERVER['REMOTE_ADDR']) : $_SERVER['REMOTE_ADDR'];
na
$ip = get_client_ip_address();
// tutaj kod do sprawdzania login i adres IP
$allowed_ip = array('user_1' => array('1.2.3.4', '5.6.7.8'), 'user_2' => array('2.3.4.5', '3.4.5.6'));
if (isset($allowed_ip[$login])) {
if (!in_array($ip, $allowed_id[$login])) return true; // jest zbanowany
}
// koniec kodu
$param = $login ? md5($login . $ip) : $ip;
Podmieniłem REMOTE_ADDR na funkcję, która już jest w EPESI, ale akurat tam nie była jeszcze używana - w nowym release już będzie.
Nie testowałem, ale powinno działać.
Jedyny mankament, to użytkownik dostanie komunikat, że przekroczył liczbę prób logowania z danego adresu
You have exceeded the number of allowed login attempts for this username. Try again later.
Gdyby chcieć dać właściwy komunikat, to trzeba by zrobić trochę więcej zmian.
Pozdrawiam,
Adam