2014-01-29 9 views
-2

我想創建一個網站使用用戶配置文件,並根據所選配置文件動態地建立菜單,例如,如果我需要一個管理員用戶,該菜單包含所有權限沒有限制,如果需要賣方我需要建立菜單根據賣方纔能完成的任務,如產品目錄,價格等方面的如何根據配置文件建立動態菜單的網站?

我目前做的每個用戶的菜單,就是在做一個叫管理員和另一個叫賣方,當有人登錄,配置文件應該進行驗證,例如,如果登錄用戶是一個管理員管理員菜單加載,並且如果它是賣家收取賣家菜單,但我不想這樣做,因爲可能有超過20個角色,需要優化,我將不勝感激有一些幫助,我使用HTML5,PHP,JavaScript。

謝謝

+1

歡迎來到SO。這是一個問答社區。我們很樂意幫助解決具體問題,但不能提供廣泛的廣泛建議。請顯示你已經寫過的一些代碼,並解釋你在哪裏遇到麻煩。參見[問]你是否需要關於它如何工作的幫助。 – simbabque

回答

0

你可以用幾種方法做到這一點。

  1. 爲每種類型都有一個包含文件,儘管有20個配置文件可能成爲大量文件。
  2. 根據菜單的結構,使用一個多維數組,其中用戶類型爲鍵,每個項的值爲所有菜單項的第二個數組。然後使用php在數組中移動。
  3. 你可以用另一種方式來做你的數組,並且有完整的菜單,然後根據你的數組中的設置,根據分配給它的用戶只顯示部分。
1

這是可能更好的是在PHP而不是JavaScript。當然菜單移動的東西是用JavaScript編寫的,但我不認爲這就是你所問的(如果你也需要幫助,它應該是它自己的問題)。

對於菜單,而不是構建每個菜單,將其翻轉。對於每個可能的項目,定義哪些角色可以看到該項目。然後,瀏覽每個項目,抽出符合用戶角色的項目。

此代碼是一種通用的,因爲我不知道該怎麼跟你工作,但是:

class MenuItem { 
    public $name; 
    public $url; 
    public $allowedRoles; 

    public function __construct($name, $url, $allowedRoles) { 
     $this->name = $name; 
     $this->url = $url; 
     $this->allowedRoles = $allowedRoles; 
    } 
} 

$items = array(
    new MenuItem('Everyone', 'http://example.com', array('seller', 'admin')), 
    new MenuItem('Sellers Only', 'http://example.com/seller', array('seller')), 
    new MenuItem('Admins Only', 'http://example.com/admin', array('admin')) 
); 

function getItemsForRole($items, $role) { 
    $userItems = array(); 

    foreach ($items as $item) { 
     if (in_array($role, $item->allowedRoles) { 
      $userItems[] = $item; 
     } 
    } 

    return $userItems; 
} 

$adminItems = getItemsForRole($items, 'admin'); 
$sellerItems = getItemsForRole($items, 'seller'); 

你仍舊需要邏輯爲用戶,並建立相應的菜單,但我希望,讓你這個想法。

0

這是一個很好的應用程序Knockout.js - 創建一個帶有類型的用戶視圖模型,然後使用data-bind="with: User, visible: User.Type()=='Admin' || User.Type() == 'Sales'"作爲HTML屬性來自動隱藏/顯示菜單項。

當然,爲了安全起見,您仍然必須檢查用戶是否有正確的訪問級別來執行給定的操作,但這是一個相對簡單的過程。

相關問題