Во-первых, вы не можете запретить пользователям вводить определенный URL-адрес. Единственный способ ограничить определенные скрипты или разделы кода для определенных пользователей - это с помощью кода [или, ну, в общем, определенных настроек Apache].
Этот код неверен, поскольку он (вероятно) написан для проверки существования сеанса, но он не проверяет, является ли сеанс ПОКУПАТЕЛЕМ :
function isLoggedIn()
{
if(isset($_SESSION['valid']) && $_SESSION['valid'])
header( 'Location: buyer/' ); # return true if sessions are made and login creds are valid
echo "Invalid Username and/or Password";
return false;
}
Вам нужно также проверить $_SESSION['uUserType']
.
Я бы инкапсулировал весь материал внутри класса:
class CUserRole {
const USER_NO_ROLE = 'user.noRole';
const USER_BUYER = 'user.buyer';
const USER_MERCHANT = 'user.merchant';
const PAGE_LOGIN = 'index.php';
static
public function getCurrentUserRole() {
if ( ! isset( $_SESSION )) {
return self::USER_NO_ROLE;
}
switch( $_SESSION['uUserType'] ) {
case 1:
return self::USER_BUYER;
case 2:
return self::USER_MERCHANT;
default:
die( 'Inconsistent/Invalid uUserType' );
}
}
static
public function forwardIfNotRole( $aRole, $forwardAddress = self::PAGE_LOGIN ) {
if ( $aRole != self::getCurrentUserRole() ) {
header( 'Location: ' . forwardAddress );
exit;
}
}
static
public function evaluateCredentials( ) {
// checks passed login parameters against the DB
// and sets up the session with appropriate values
}
}
Везде, где необходимо, добавьте эту строку в начале вашего скрипта:
CUserRole::forwardIfNotRole( CUserRole::USER_BUYER, 'some/where/address' );
Или просто, чтобы переслать в index.php:
CUserRole::forwardIfNotRole( CUserRole::USER_BUYER );
Это решение включает основную часть управления вашими ролями в отдельный класс.
Наконец,Я не вижу причины, по которой нужно установить это:
$_SESSION['valid'] = 1;
Использование статических методов - довольно простое решение, использование дизайна singleton pattern было бы намного лучше.