2014-10-25 6 views
0

Я перенаправляю пользователей в зависимости от роли;перенаправление на страницу в зависимости от ролей

username | password | accessLevel 
xxxxxx  xxxxxx  admin 
xxxxxx  xxxxxx  member 
xxxxxx  xxxxxx  none 

У меня есть следующая страница check.php;

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 

// Register $myusername, $mypassword and redirect to file "index.php" 
$_SESSION['myusername']= $myusername; 
$_SESSION['mypassword']= $mypassword; 
$role = mysql_fetch_array($result); 

if($role['accessLevel'] == "admin"){ 
     header("location:index.php"); 
      exit(); 
     } 
     elseif($role['accessLevel'] == "member"){ 
    header("location:tasks.php"); 
     exit(); 
    } 

else { 
echo "Error: Username, Password or Access Level incorrect! Go Home, you're Drunk!!!"; 
} 

    } 
ob_end_flush(); 
?> 

Это перенаправляет правильную роль правых страниц, но если они печатают страницы в том же каталоге, что они могут также получить доступ к другим страницам Я не хочу, чтобы они, я хочу, чтобы ограничить «элемент» к определенным страницам и «admin» на всех страницах, что мне нужно в верхней части страниц, чтобы отличить 2 роли пользователя?

У меня есть следующие поверх всех моих страниц;

<?php 
session_start(); 
////if(!session_is_registered(myusername)){ 
if (!isset($_SESSION['myusername'])) { 
header("location:main_login.php"); 
} 

Могу ли я изменить это, чтобы ограничить страницу зависящей от accessLevel?

ответ

0

Я исправил его, назначив имя сеанса на странице check_login.php и проверил isset на страницах, которые я хотел ограничить только администратором.

Я пробовал это ранее, но имел синтаксические ошибки, которые я теперь исправил после кофе и свежего воздуха.

0

Очень простой и я сделал, что почти все из моего проекта, То, что вы должны сделать это, 1. заселение вместо себя иного передача роль в сессии тоже, как USERNAME, после успешного входа в систему, то в верхней части каждой страницы старта сеанс и проверить разрешение. Forexample: (! $ Роль [ 'AccessLevel'] == "член") index.php для администратора

<?php 
session_start(); 
if($_SESSION['accessLevel'] !== "admin"){ header("location:Adminlogin.php"); } 
?> 
<!-- go whith your page --> 

равно tasks.php для члена

<?php session_start(); 

если {заголовок ("место : Memberlogin.php "); }>

2. заселение вместо себя иных Дайте различные идентификаторы сессии для членов и администратора,

примера: из части коды ...

<?php 
    //fetch its role in DB then assign, like 
    if($role['accessLevel'] == "admin"){ 

    $_SESSION['admin']=$role['username']; 

    header("location:index.php"); 

    } 
    elseif($role['accessLevel'] == "member"){ 
    $_SESSION['member']=$role['username']; 
    header("location:tasks.php"); 

} 

то перед нагрузкой полной страницы проверки firstt доступ, как я сделал выше если для

$_SESSION['admin'] 

или

$_SESSION['member']. 
0
Your page ha s the following mistake, you have to fix them. 

1. you pass password as clear text (md() is needed for encryption) 

2.you store password into sessionvariable, what for? (if user log in sucessfull we take his/her id into session for other use not checking login always. 

3.stripslashes,mysql_real_escape_string are not ecure enough for you to pass the password direct, Query by username then compar 

Also there is NOTICE on your code. 

1. try to avoid the use of * in sqlSting(query statments), 
tey hinder perfomance. 
select only field tha you have to use. 

2. there is no need of using exit() where you place them, if...else enough 

3.Instead of 
$myusername = stripslashes($myusername); 
$myusername= mysql_real_escape_string($myusername); 

you can have 

$myusername = stripslashes(mysql_real_escape_string($myusername)); 
Смежные вопросы