功能返回

时间:2013-01-22 13:38:17

标签: php function navigationbar

我尝试制作导航栏。

/* Only for admin */
function getAccessRights($links) {
    if ( isset($_SESSION['right']) && $_SESSION['right'] === ACCESS_ADMIN  ||
        isset($_COOKIE['right']) && $_COOKIE['right'] === ACCESS_ADMIN ) {
        $links[] = '<li><a href="messages.phtml">Read messages</a></li>';
        var_dump($links); // **Back, Login, Read messages.**
        return $links;
    }
}



 function drawNavBar() {
    if ( $_SERVER['PHP_SELF'] == "/form-msg.php" ) {
        $links[] = '<li><a class="back" href="index.php">Back</a></li>';
        $links[] = '<li><a href="admin.php">Login</a></li>';
        getAccessRights(); // I dont know what access have user. If he have admin access, he will see link "read messages".
        var_dump($links) // **Back, Login**
    }
    //some if
    makeNavBar($links); //makeNavBar it is function which do pattern for html
  }

哪里链接“阅读邮件”?也许你知道一个更好的方法来制作导航栏。

3 个答案:

答案 0 :(得分:1)

我会做这样的事情:

//returns true or false based on user rights
function isAdmin() {
    return (isset($_SESSION['right']) && $_SESSION['right'] === ACCESS_ADMIN  || isset($_COOKIE['right']) && $_COOKIE['right'] === ACCESS_ADMIN)
}

 function drawNavBar($links = array()) {
    if ( $_SERVER['PHP_SELF'] == "/form-msg.php" ) {
        $links[] = '<li><a class="back" href="index.php">Back</a></li>';
        $links[] = '<li><a href="admin.php">Login</a></li>';
        if(isAdmin())
            $links[] = '<li><a href="messages.phtml">Read messages</a></li>';

        var_dump($links) // **Back, Login**
    }
    //some if
    makeNavBar($links);
  }

答案 1 :(得分:1)

链接是getAccessRights()方法的返回值,但是您调用此方法忽略返回值。此外,getAccessRights()需要参数$links,但您不会传递参数。

BTW:您可以通过$_COOKIE变量中的标志来确定用户的管理员状态。这是高度不安全$_COOKIE变量包含客户端cookie中发送的所有内容。这意味着用户可以修改cookie的内容(并通过编辑自己的cookie使自己成为管理员)。

答案 2 :(得分:0)

在函数drawNavBar

$links[] = getAccessRights();

在函数getAccessRights

$links = array();
$links[] = '<li><a href="messages.phtml">Read messages</a></li>';
return $links;

顺便说一句..函数getAccessRights的命名是不对的,我会尝试 使用更通用的权限管理方法,例如Access control list