2013-01-22 158 views
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 
    } 

Where where「Read messages」?也許你知道一個更好的方法來做導航欄。

回答

0

在功能drawNavBar

$links[] = getAccessRights(); 

而且在功能getAccessRights

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

由函數的way..the命名getAccessRights是不對的,我會嘗試 使用一個更通用的方法以權利管理爲例,例如Access control list

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); 
    } 
+0

但是,如果我將有很多鏈接,我必須爲每個頁面編寫此代碼?我說'if(isAdmin())'。 – row248

+0

是的,您也可以創建一個單獨的文件,並在每個要顯示此導航欄的文件中包含該文件。 但是根據'helmbert'的說明,根據cookie中的值授權用戶是不安全的。 – noslone

1

鏈接是getAccessRights()方法的返回值,但你調用這個方法忽略返回值。此外,getAccessRights()需要一個參數$links,但您不通過一個。

順便說一下:您可以通過$_COOKIE變量中的一個標記來確定用戶的管理狀態。這是高度不安全。變量$_COOKIE包含客戶端cookie中發送的所有內容。這意味着用戶可以修改cookie的內容(並通過編輯自己的cookie來使自己成爲管理員)。