使用php在导航菜单中设置文件权限
您好,提前谢谢您的帮助。我有一个更强大的版本,我正在努力,但我需要一些短期的东西。我们创建了对管理面板的两层用户访问权限。员工和管理员。下面的代码是我们在短期内实现的较长版本的一个简短版本示例。首先,我想检查他们的访问级别是级别1还是级别0。这是OOP中的一个方法使用php在导航菜单中设置文件权限,php,mysql,privileges,Php,Mysql,Privileges,您好,提前谢谢您的帮助。我有一个更强大的版本,我正在努力,但我需要一些短期的东西。我们创建了对管理面板的两层用户访问权限。员工和管理员。下面的代码是我们在短期内实现的较长版本的一个简短版本示例。首先,我想检查他们的访问级别是级别1还是级别0。这是OOP中的一个方法 function menuPriviledge($dbCon){ $username = $_REQUEST['username']; if($accessLevel = $this->
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=to 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(isset($access)){
交换机($access){
案例1:
$query=“从CVCUserFilePrivileges中选择*”;
如果($files=$this->dbConnection->query($query)){
而($access=$files->fetch_assoc()){
printf(“
“,$access['directoryList'],$access['dlrPaidListing'],$access['listingSideAds'],$access['scrapMetalAds'],$access['coinRequestAds'],$access['DlRformas']);
}
}
打破
案例0:
$query=“从CVCUserFilePrivileges中选择*”;
如果($files=$this->dbConnection->query($query)){
而($access=$files->fetch_assoc()){
printf(“
“,$access['directory'],$access['dlrPaidListing']);
}
}
打破
违约:
echo“出现错误,未设置访问级别,请与数据库管理员联系”;
}
}
当它半工作时,它继续将第一页链接添加到它下面的每个导航选项,因此每个导航选项都指向同一页。当它不工作时,它就完全消失了,导航甚至不存在。我希望我能充分解释这一点。问题似乎出在if语句上,在显示导航菜单之前,我测试了它们的访问级别。将代码更改为:
if(isset($access)) {
switch($access) {
case 1:
// do the code
break;
case 2:
// do the code
break;
}
}else{
echo "access not set";
}
试试这个
注:1它与“1”不同。您是否将sql字段设置为int?为了在保护页面的同时充分发挥作用,我添加了此简单代码来存储登录过程中登录的当前用户名
session_start();
$_SESSION['username'] = $user;
然后我添加了一个包含以下语法的include文件
session_start();
if(isset($_SESSION['username'])){
$userId = $_SESSION['username'];
} else {
echo "You don't have credentials to enter...";
exit();
die();
}
这个include被添加到所有文件中,或者我还可以选择将所有页面中的公共include文件包含到包含所有公共include()的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');
}
}
}
现在一切都好了,速度也快了 嗨,新兵们。。。第一:为了获得良好的实践,您必须在
if
语句之前启动$access
变量。第二:如果您的用户只有两种访问类型,则不需要使用else If
。仅其他
标记。第三:您的SQL查询在管理员和员工两种情况下都是相同的。谢谢@Thiagaougustusoliveira,我将在没有elseif的情况下使用它。SQL查询是相同的,因为每个访问级别可用的文件数量已经预先确定并硬编码到php中。上面我只显示了1echo$access代码>请查看输出并告诉我。我之前做过,它给了我一个1,这是正确的。我只是仔细检查了一下。早些时候,我还拿走了printf(“”);转换为和echo,并将末尾的数据更改为菜单内部,以查看该操作是否有效,但仍然收到空响应。没有出现菜单。我注意到,当我取出while语句时,它会显示出来,但列表中只有第一个链接附加到每个导航选项卡,因此您只能转到一页。哦,很高兴能提供帮助!是的,通过这种语法,它变得更容易阅读和运行。荣誉