anderfels
@anderfels

Перенаправление на разные URL-адреса для разных ролей после входа в систему?

Есть таблица users со столбцами id_user, login_user, password_user, mail_user и role.
role - int(3). Предусмотрено 3 вида роли: 1 - обычный пользователь, 2 - модератор, 3 - администратор. По умолчанию, при регистрации, пользователь автоматически получает role - 1.
Нужно сделать так, чтобы при авторизации пользователи с разными ролями попадал на разные страницы профиля. Например: админ - admin.php, user - user.php и т.д.
Собственно, проблема в том, что при авторизации role игнорируется. Т.е. авторизовался пользователь с role 1, а ему страницу role 3 выдает. Если просматривать сам код страницы, видно, что пользователь как бы и на admin.php, и на user.php.
Перерыл половину Интернета, ничего не нашел. Либо я слепой, либо не хватает логики. В любом случае, буду благодарен за помощь.
auth.php:
function check() {
	
		if (isset($_SESSION['id_user'])  and isset($_SESSION['login_user'])) return true;
		else {
				if (isset($_COOKIE['id_user']) and isset($_COOKIE['code_user'])) {
				$db = new mysql(); 
				$id_user=$db->screening($_COOKIE['id_user']);
				$code_user=$db->screening($_COOKIE['code_user']);
				if ($db->query("SELECT * FROM `session` WHERE `id_user`=".$id_user.";", 'num_row', '')==1) {
				$data = $db->query("SELECT * FROM `session` WHERE `id_user`=".$id_user.";", 'accos', '');
					if ($data['code_sess']==$code_user and $data['user_agent_sess']==$_SERVER['HTTP_USER_AGENT']) {
						$_SESSION['id_user']=$id_user;
					$_SESSION['login_user']=$db->query("SELECT login_user FROM `users` WHERE  `id_user` = '".$id_user."';", 'result', 0);
					setcookie("id_user", $_SESSION['id_user'], time()+3600*24*14);
						setcookie("code_user", $code_user, time()+3600*24*14);
						return true;
					} else return false; 
				} else return false; 
			} else return false;
		}
	}
	function authorization() {
		$db = new mysql(); 
		$login = $db->screening($_POST['login']);
		$passwd = md5($db->screening($_POST['passwd']).'lol'); 
		if ($db->query("SELECT * FROM `users` WHERE  `login_user` =  '".$login."' AND  `passwd_user` = '".$passwd."';", 'num_row', '')==1) {
		$_SESSION['id_user']=$db->query("SELECT * FROM `users` WHERE  `login_user` =  '".$login."' AND  `passwd_user` = '".$passwd."';", 'result', 0);
			$_SESSION['login_user']=$login;
			$r_code = $this->generateCode(15);
			if ($db->query("SELECT * FROM `session` WHERE `id_user`=".$_SESSION['id_user'].";", 'num_row', '')==1) {
			$db->query("UPDATE `session` SET `code_sess` = '".$r_code."', `user_agent_sess` = '".$_SERVER['HTTP_USER_AGENT']."' WHERE `id_user` = ".$_SESSION['id_user'].";", '', '');
		header("Location: index.php");	} else {
			$db->query("INSERT INTO `session` (`id_user`, `code_sess`, `user_agent_sess`) VALUES ('".$_SESSION['id_user']."', '".$r_code."', '".$_SERVER['HTTP_USER_AGENT']."');", '', '');
setcookie("id_user", $_SESSION['id_user'], time()+3600*24*14);
setcookie("code_user", $r_code, time()+3600*24*14);	

		}

Код index.php:
<?php
$r='';
$auth = new auth(); 
if (isset($_POST['send'])) {
	if (!$auth->authorization()) {
	$error = $_SESSION['error'];
	unset ($_SESSION['error']);
	}
}

if (isset($_GET['exit'])) $auth->exit_user();
$id_user = $_SESSION["id_user"]; 
if ($auth->check())
if ($role=["3"]) {
 $r.="

(' <li><a  href='admin.php'> ".$_SESSION['login_user']."
</a></li><li><a href='?exit'>Выйти</a></li>')";}

    if($role=["2"])
 {   $r.="

(' <li><a  href='moder.php'> ".$_SESSION['login_user']."
</a></li><li><a href='?exit'>Выйти</a></li>')"; } 

 if($role=["1"])
 {   $r.="

(' <li><a  href='user.php'> ".$_SESSION['login_user']."
</a></li><li><a href='?exit'>Выйти</a></li>')"; } 

else {
	
	$r.='
<li><a href="signin.php">Войти/Зарегистрироваться</a></li>
	';
}
	print $r;

?>
  • Вопрос задан
  • 608 просмотров
Пригласить эксперта
Ответы на вопрос 1
@DanKud
Просто допишите в каждом условии редирект на нужную страницу. Например:
if ($role = '1') {
    header('Location: user.php');
    ......
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы