mysql — устанавливает привилегии файла в навигационном меню с переполнением стека

Здравствуйте и спасибо за помощь заранее. У меня есть более надежная версия, над которой я работаю, но мне нужно что-то на короткий срок. Мы создали двухуровневый доступ пользователей к административной панели. Сотрудник и администраторы. Приведенный ниже код является кратким примером более длинной версии, которую мы реализуем в краткосрочной перспективе. Сначала я хочу проверить их уровень доступа, если это уровень 1 или уровень 0. Это метод в ООП.

    function menuPriviledge($dbCon){

$username = $_REQUEST['username'];

if($accessLevel = $this->dbConnection->query("SELECT access FROM UserProfiles WHERE username = '$username' LIMIT 0, 1")){
while($accessData = $accessLevel->fetch_assoc()){
$access = $accessData['access'];
}
}

После того, как я закончу повторять эту верхнюю часть, я получаю правильный ответ, я получаю уровень доступа 1, связанный с текущим именем пользователя в учетной записи. Это то, что я искал, так что мы хороши, но затем в следующем операторе if я проверяю, что переменная $ access равна = 1 (утверждение ниже), если она равна 1, я вызываю printf и отображаю текущий список Навигационные меню подготовлены для администраторов, в противном случае отображается другое предустановленное меню для сотрудников с ограниченным доступом к страницам.

            if(isset($access)){

switch($access){

case 1:
$query = "SELECT * FROM CVCUserFilePrivileges";
if($files = $this->dbConnection->query($query)){
while($access = $files->fetch_assoc()){
printf("<li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Directory Listings</a></li>
<li><a title=\"Ads Manager\"><i class=\"icon-laptop\"></i>Ads Manager<span>5</span></a>
<ul>
<li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Dealer Paid Listings</a></li>
<li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Listing Side Ads</a></li>
<li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Scrap Metal Page Ads</a></li>
<li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Coin Request Page Ads</a></li>
<li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Dealer Form Page Ads</a></li>
</ul>
</li>", $access['directoryList'], $access['dlrPaidListing'], $access['listingSideAds'], $access['scrapMetalAds'], $access['coinRequestAds'], $access['dlrFormAds']);
}
}
break;
case 0:
$query = "SELECT * FROM CVCUserFilePrivileges";
if($files = $this->dbConnection->query($query)){
while($access = $files->fetch_assoc()){
printf("<li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Directory Listings</a></li>
<li><a title=\"Ads Manager\"><i class=\"icon-laptop\"></i>Ads Manager<span>1</span></a>
<ul>
<li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Dealer Paid Listings</a></li>
</ul>
</li>", $access['directory'], $access['dlrPaidListing']);
}
}
break;
default:
echo "There is an error, no access level set, contact your database administrator";
}
}

Когда он частично работает, он продолжает добавлять ссылку на первую страницу к каждому параметру навигации под ним, поэтому каждый параметр навигации ведет к одной и той же странице. Когда он не работает, он просто полностью исчезает, а навигация даже не существует. Я надеюсь, что смог объяснить это достаточно хорошо. Кажется, проблема в операторе if, где я проверяю их уровень доступа, до отображения меню навигации.

1

Решение

Измените код на:

if(isset($access)) {

switch($access) {

case 1:
// do the code
break;

case 2:
// do the code
break;

}
}else{
echo "access not set";
}

Попробуй это.

Ps .: 1 отличается от «1». Вы поместили свое поле sql как int?

1

Другие решения

Чтобы сделать это полностью, защищая страницы, я добавил этот простой код для хранения текущего имени пользователя, которое вошло в систему во время входа в систему.

        session_start();
$_SESSION['username'] = $user;

Затем я добавил включаемый файл, который содержит что-то вроде приведенного ниже синтаксиса.

session_start();
if(isset($_SESSION['username'])){
$userId = $_SESSION['username'];
} else {
echo "You don't have credentials to enter...";
exit();
die();
}

Это включение было добавлено ко всем файлам, или у меня также была возможность включить общие включаемые файлы, которые идут на всех страницах, во включаемый файл, который будет содержать все общие include (); файлы. Теперь он ограничивает доступ, если кто-то не входит в систему, но если у кого-то есть лучший способ оптимизации этого кода, дайте мне знать. Я думал, что эта версия была простой и легкой. Любые дополнительные уровни безопасности, которые каждый может порекомендовать, пожалуйста, дайте мне знать. Кто-то еще, вероятно, может использовать это тоже.

Теперь на основе имени пользователя, хранящегося в $userId это обеспечит правильное меню.

Синтаксис для меню был что-то вроде того, что ниже.

class menu{

public function __construct($dbCon){
$this->dbConn = $dbCon;
}

function menuPriviledges($dbCon){

global $userId;

if($accessLev = $this->dbConn->query("SELECT access FROM UserProfiles WHERE userId = '$userId'")){
while($Data = $accessLev->fetch_assoc()){
$access = $Data['access'];
}
}

if($access == 1){
include('common-menu-admin.php');
} elseif($access == 0) {
include('common-menu-employee.php');
}

}
}

Теперь все работает и работает быстро!

0

По вопросам рекламы [email protected]