2011-06-28 122 views
10

我想要一些具有PHP經驗的人的建議。對不同角色的用戶顯示不同的頁面

我在做一個PHP的網站,這將有4個種類的用戶: 1.客人(未註冊), 2.註冊, 3.有特殊的privilages註冊, 4.管理員

所以相同的頁面對於其中的全部四個將是不同的。

現在我正在使用if條件來做到這一點。 在每個頁面中,我正在檢查用戶的role,然後使用許多if語句來相應地顯示頁面。

它使代碼非常大而且不整潔,我必須在所有頁面中一次又一次地檢查條件。

  1. 有沒有更好的方法來做到這一點?

  2. 這是如何在大型專業網站上完成的?

  3. 擴展問題: 使用像kohana 3.1這樣的MVC框架來做同樣的事情的最佳方式是什麼?它與acl有什麼關係?

+0

擴展答案:是的,ACL是一個訪問控制列表。它基本上說「這是一個用戶帳戶詳細信息頁面,因此可以通過以下角色訪問:'註冊用戶','管理員','超級用戶','上帝'」。 – cypher

回答

5

這真的取決於你需要什麼。

例如,如果頁面有徹底改變大的一部分,我的建議是創造不同的模板,包括他們根據自己的「權限」

$permission = $_SESSION['type_user']; 
include '/path/to/file/with/permission/'.$permission.'/tpl.html'; 

,並有類似

東西在頁面
<?php 
//inside include.php you have the line similar to 
//$permission = isset($_SESSION['type_user']) && $_SESSION['type_user']!=''?$_SESSION['type_user']:'common'; 
require_once '/mast/config/include.php'; 
include '/path/to/file/with/permission/common/header.html'; 
include '/path/to/file/with/permission/'.$permission.'/tpl_1.html'; 
include '/path/to/file/with/permission/common/tpl_2.html'; 
include '/path/to/file/with/permission/'.$permission.'/tpl_3.html'; 
include '/path/to/file/with/permission/common/footer.html'; 
?> 

如果腳本充滿了像「顯示這個文本」,或「顯示這個按鈕」,您可以創建將檢查的權限爲您

功能小配件
<?php 
function can_user($action, $what){ 
    switch($action){ 
     case 'write': 
      return $your_current_if_on_what; 
      break; 
     case 'read': 
     default: 
      return $your_current_if_on_what; 
      break; 
    } 
} 
?> 

and the template will look like: 

[my html] 
<?=can_user('read','button')?'My Button':''?> 
[my html] 

作爲一條經驗法則,如果一段代碼被使用超過2次,需要分別放入一個函數/文件中,所以如果你有很多「IFS」,你需要創建一個函數

+1

謝謝。雖然花了一些時間去了解,但我明白了。任何想法如何由大型專業網站完成? –

+0

依靠大型專業網站取決於您的意思。我爲大型網站運行和開發,並且每次都是根據參數是不同的解決方案。例如,您必須記住,每次PHP訪問文件系統時都會遇到很大的性能問題,但有些加速器/優化器通常可以提供幫助(我使用eAccelerator)。 – Fabrizio

+0

我最近的兩個大網站我使用了兩個組合,其中我想包含的模板被傳遞給「can_user」,並且在用戶沒有權限時返回模板名稱本身或不同的模板名稱看那部分。類似'include can_user('read','button','button_html');'和can_user函數將會是'return $ this_user_can?$模板, 'permission_deny_in_page';' – Fabrizio

相關問題