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 に答える