Я пытаюсь создать систему входа в систему, которая проверяет роль пользователя и перенаправляет на соответствующую панель мониторинга, а также запрещает пользователям вручную вводить URL-адреса панелей других пользователей.
Логин работает отлично, но проверка роли пользователя не так уж и много.
На сайте есть одна панель управления для каждой роли, и в верхней части каждой это:
session_start();
if(!$_SESSION['sess_role'] == 'role1') {
header('location:../../index.php');
}
Кажется, что это работает, когда вы не вошли в систему, отправив вас обратно на страницу индекса правильно, потому что атрибут 'sess_role' не совпадает, но как только я войду в систему с ЛЮБЫМ пользователем, я смогу ввести КАЖДУЮ отдельную панель мониторинга путем ввода URL-адреса вручную, несмотря на отсутствие правильной «роли» для него.
Вот код для входа:
$msg = "";
if(isset($_POST['submitBtnLogin'])) {
$username = trim($_POST['username']);
$password = trim($_POST['password']);
if($username != "" && $password != "") {
try {
$query = "select * from `users` where `username`=:username and `password`=:password";
$stmt = $db->prepare($query);
$stmt->bindParam('username', $username, PDO::PARAM_STR);
$stmt->bindValue('password', $password, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($count == 1 && !empty($row)) {
$_SESSION['sess_user_id'] = $row['id'];
$_SESSION['sess_username'] = $row['username'];
$_SESSION['sess_role'] = $row['role'];
}
if($row['role'] == "role1") {
header('location:modules/role1/index.php');
} else if($row['role'] == "role2") {
header('location:modules/role2/index.php');
} else if($row['role'] == "role3") {
header('location:modules/role3/index.php');
} else if($row['role'] == "role4") {
header('location:modules/role4/index.php');
} else {
$msg = "Invalid login information.";
}
} catch (PDOException $e) {
echo "Error : ".$e->getMessage();
}
} else {
$msg = "Both fields are required.";
}
}
Я пытался сделать:
echo($_SESSION['sess_role']);
Чтобы увидеть, что вывод, и он, кажется, работает как задумано, показывая «роль1», когда я нахожусь на учетной записи «роль1», и то же самое для других ролей.
Например, при доступе к приборной панели "role2" выводом остается "role1", но я все еще могу войти.
Я был бы очень признателен за помощь в определении проблемы.