我创建简单的功能,如果条件对用户进行大访问:
以下代码正常运行。
$_SESSION['role'] = 3
if($_SESSION['role'] == 1 || $_SESSION['role'] == 2){
echo "Access Granted";
}
else
{
echo "Access Denied";
}
上面的代码对我有用,但是当我将其转换为如下代码的函数时,它不适用:
function access($allowed_users) {
foreach ($allowed_users as $key => $value) {
$user .= $_SESSION['role'] ." == ".$value." || "; // Here I'm generating statement to use in If condition
}
$user = substr(trim($user), 0, -3);
if($user){
echo "Access Granted";
}
else
{
echo "Access Denied";
}
}
access(array('1', '2'));
这不起作用,并且在显示Access Granted
时始终显示Access Denied
,因为$_SESSION['role']
值为3。
答案 0 :(得分:3)
除非您使用eval
,否则无法像在运行时那样生成条件。
foreach ($allowed_users as $key => $value) {
$user .= $_SESSION['role'] ." == ".$value." || "; // Here I'm generating statement to use in If condition
}
$user = substr(trim($user), 0, -3);
您需要的是功能in_array
:
function access($allowed_users)
{
// in_array needs always an array as second parameter
// handle a non array argument: (e.g. access(2))
if (!is_array($allowed_users)) $allowed_users = array($allowed_users);
// Check if $_SESSION['role'] is in $allowed_users
if (in_array($_SESSION['role'], $allowed_users)) {
echo 'Access granted';
} else {
echo 'Access denied';
}
}
答案 1 :(得分:3)
你无法评估这样的字符串 - 由于php类型比较,你的代码只返回true:
http://php.net/manual/en/types.comparisons.php
你可以(但肯定不应该)使用if(eval($user))
。重构会更好:
function access($allowed_users) {
if(in_array($_SESSION['role'], $allowed_users)) // There was syntax error here because bracket was not closed
{
echo "Access Granted";
}
else
{
echo "Access Denied";
}
}
答案 2 :(得分:1)
除非$user
var为0
或false
,否则条件将始终评估为true,并且将执行并回显Access Granted
。您需要提出一个更加可靠的条件语句,只有在授予访问权限时才会计算为true。提示,检查值==
。
答案 3 :(得分:0)
注意不同的
S_SESSION['userrole']
和
$_SESSION['user']
在你的函数和它上面的代码中。你有没有改变会话var?