Сценарий входа в систему PHP - операторы If и массивы

Здравствуйте, коллеги программисты и кодеры. Я разрабатываю расширенный сценарий входа на основе уже отличного сценария входа от zubrag.

Чего я пытаюсь достичь: Если пользователь является администратором, он войдет в систему. Если пользователь является обычным пользователем, он не войдет в систему.

Что происходит: пользователь входит в систему, даже если он не является администратором.

Вот фрагмент кода:

// user provided password
if (isset($_POST['access_password'])) {

  $login = isset($_POST['access_login']) ? $_POST['access_login'] : '';
  $pass = $_POST['access_password'];
  if (!USE_USERNAME && !in_array($pass, $users)
  || (USE_USERNAME && ( !array_key_exists($login, $users) || $users[$login] != $pass ) ) 
  ) {
      showLoginPasswordProtect("Incorrect username or password.");
  }

Часть, с которой у меня проблемы:

  elseif (array_key_exists($login, $admins)) {
  showLoginPasswordProtect("User not an admin.");
  }

Остальная часть кода:

  else {
      // set cookie if password was validated
      setcookie("verify", md5($login.'%'.$pass), $timeout, '/');
      setcookie("user", $login, 0, '/');
      // Some programs (like Form1 Bilder) check $_POST array to see if parameters passed
      // So need to clear password protector variables
      unset($_POST['access_login']);
      unset($_POST['access_password']);
      unset($_POST['Submit']);
  }

}

Массив имени пользователя и пароля:

$users = array(
  'username' => 'password',
  'administrator' => 'administrator-password'
);

Массив администратора:

$admins = array(
  'administrator'
);

Теперь представьте все это вместе, и в чем может быть проблема? (Наверное, это очень просто, я просто не профессиональный кодер.)


person Alexander Sagen    schedule 25.12.2012    source источник


Ответы (1)


Вы уверены, что администраторы могут войти?

Здесь вы говорите, что если имя пользователя находится в массиве администратора, запретите доступ:

elseif (array_key_exists($login, $admins)) {
  showLoginPasswordProtect("User not an admin.");
}

Что вы, вероятно, захотите сделать, так это запретить доступ для пользователей, не входящих в массив администратора:

elseif (!array_key_exists($login, $admins)) {
  showLoginPasswordProtect("User not an admin.");
}
person Phil Rykoff    schedule 25.12.2012