Здравствуйте и спасибо за помощь заранее. У меня есть более надежная версия, над которой я работаю, но мне нужно что-то на короткий срок. Мы создали двухуровневый доступ пользователей к административной панели. Сотрудник и администраторы. Приведенный ниже код является кратким примером более длинной версии, которую мы реализуем в краткосрочной перспективе. Сначала я хочу проверить их уровень доступа, если это уровень 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, где я проверяю их уровень доступа, до отображения меню навигации.
Измените код на:
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?
Чтобы сделать это полностью, защищая страницы, я добавил этот простой код для хранения текущего имени пользователя, которое вошло в систему во время входа в систему.
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');
}
}
}
Теперь все работает и работает быстро!