【发布时间】:2020-06-04 03:08:34
【问题描述】:
我偶然发现了一些让我非常困难的事情,我无法弄清楚,所以请看看我的情况并帮助我...
我正在编写一个代码,旨在防止某些网站用户访问网站的特定部分,称为 orders.php
每个用户都有一个先前分配的角色,我试图通过仅允许少数角色访问它来实现此限制,因此,如果您没有允许访问分配给的网站的某些特定角色你,你被重定向到主页。
这是我尝试过的方法之一
if( $userrole !== 'Administrator' OR
$userrole !== 'Manager' OR
$userrole !== 'Product Hunter' OR
$userrole !== 'Product Selector' OR
$userrole !== 'Analytic' OR
$userrole !== 'Order Manager'){
header('Location: ../dashboard.php');
die;
}
else{
//code here
}
我尝试使用|| 而不是OR,但它也不起作用
我还尝试对每个角色使用elseif 语句,如下所示:
if( $userrole !== 'Administrator'){
header('Location: ../dashboard.php');
die;
}
elseif( $userrole !== 'Manager'){
header('Location: ../dashboard.php');
die;
}
elseif( $userrole !== 'Product Hunter'){
header('Location: ../dashboard.php');
die;
}
elseif( $userrole !== 'Product Selector'){
header('Location: ../dashboard.php');
die;
}
elseif( $userrole !== 'Analytic'){
header('Location: ../dashboard.php');
die;
}
elseif( $userrole !== 'Order Manager'){
header('Location: ../dashboard.php');
die;
}
else{
//code goes here
}
据我了解,代码在读取到您的角色名称时会继续执行else语句,例如,如果您是管理员,那么它将执行else语句,因为据说如果您不是某些指定角色,那么您将被重定向,并且由于 您是指定角色之一,因此代码将为您执行,但出于某种奇怪的原因,它正在重定向您无论您是管理员、经理还是访客,都可以访问首页...
代码允许您访问网站而不是将您重定向到主页的唯一方法是当您只指定一个角色时,例如:
if( $userrole !== 'Administrator'){
header('Location: ../dashboard.php');
die;
}else{
//code goes here
}
这样,如果您是管理员,那么您就可以访问该页面,如果您有任何不同的角色,您就会被重定向。
我使用!== 的原因是因为我希望代码定义该用户是否可以在开始时访问网站的这一部分,而不是告诉它向具有这几个特定角色的用户显示代码并重定向每个人否则。
$userrole 先前设置为等于 $_SESSION 变量,该变量包含用户的实际角色的值并在登录时定义,如果我回显它,它会打印角色的名称,因此不会导致问题是肯定的。
我发现一些帖子建议使用 switch 语句,但我还没有尝试过,因为如果可能的话,我更喜欢这样做。
提前致谢!
【问题讨论】:
标签: php if-statement logical-operators