0

我尝试制作导航栏。

/* 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
  }

在哪里链接“阅读消息”?也许您知道制作导航栏的更好方法。

4

3 回答 3

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);
  }
于 2013-01-22T13:44:52.370 回答
1

链接是getAccessRights()方法的返回值,但是你调用这个方法忽略了返回值。此外,getAccessRights()需要一个参数$links,但您没有传递一个。

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

于 2013-01-22T13:45:10.997 回答
0

在功能drawNavBar

$links[] = getAccessRights();

并且在功能上getAccessRights

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

顺便说一句..函数的命名getAccessRights不正确,我会尝试使用更通用的方法来进行权限管理,例如访问控制列表

于 2013-01-22T13:45:15.787 回答