2011-04-21 52 views
0

我有這樣的代碼PHP目錄的具體內容和重定向

$pageEx = explode("/", $_SERVER['PHP_SELF']); 
      $pageLn = count($pageEx); 
      $currentdir = $pageEx[$pageLn - 2]; 

      switch($currentdir) { 
       case "admin": 
        if(!$this->loggedIn) { 
         header("Location: index.php"); 
        } 
        if($this->userData['user_level'] < 3) { 
         header("Location: ../index.php"); 
        } 
       break; 

       case "mgmt": 
        if(!$this->loggedIn) { 
         header("Location: index.php"); 
        } 
        if($this->userData['user_level'] < 2) { 
         header("Location: ../index.php"); 
        } 
       break; 

       case "user": 
        if(!$this->loggedIn) { 
         header("Location: index.php"); 
        } 
        if($this->userData['user_level'] < 1) { 
         header("Location: ../index.php"); 
        } 
       break; 
      } 

和只是想知道是否有一個較短的方式,我能做到這一點?代碼有效,但它的很多代碼非常簡單。
它檢查它們在的目錄,然後如果它們不是正確的user_level,它將它們重定向到索引頁面。

編輯:完成它。

$pageEx = explode("/", $_SERVER['PHP_SELF']); 
      $pageLn = count($pageEx); 
      $currentdir = $pageEx[$pageLn - 2]; 


      /* 
       User Level Required => Directory 
      */ 
      $permissions = array(
       1 => 'user', 
       2 => 'mgmt', 
       3 => 'admin' 
      ); 

      foreach($permissions as $perms => $key) { 
       if(!$this->loggedIn) { 
        header("Location: ../index.php"); 
       } 
       if($currentdir == $key) { 
        if($perms > $this->userData['user_level']) { 
         header("Location: ../index.php"); 
        } 
       } 
      } 
+0

爲什麼要在foreach的每一次迭代中解析'!$ this-> loggedIn'?在foreach之前和之前移動它。 – 2011-04-21 01:19:32

回答

3

這個怎麼樣?

$pageEx = explode("/", $_SERVER['PHP_SELF']); 
$pageLn = count($pageEx); 
$currentdir = $pageEx[$pageLn - 2]; 

if(!$this->loggedIn) { 
    header("Location: index.php"); 
} 

$permissions = array(
    'admin' => 3, 
    'mgmt' => 2, 
    'user' => 1, 
); 

if($this->userData['user_level'] < $permissions[$currentdir]) { 
    header("Location: ../index.php"); 
} 

更新:我只注意到你想要做小於A ...所以我更新的代碼,以反映它在你的代碼的方式。

+0

差不多。我需要每次都進行登錄檢查,因爲即使它們未登錄,此腳本也能運行。 – Joshwaa 2011-04-21 00:45:40

+0

+1簡單易用的解決方案 – Wh1T3h4Ck5 2011-04-21 00:46:40

+0

這樣做的好處是您可以添加到陣列中而不必觸摸太多的代碼。或者你可以很容易地將其轉換爲閱讀數據庫等。很高興你喜歡它! – 2011-04-21 00:48:53

1

你可能會畏縮在這一點,但你可以把它降低到6行,如果長期if語句不打擾你......

$pageEx = explode("/", $_SERVER['PHP_SELF']); 
$currentdir = $pageEx[count($pageEx) - 2]; 

if(!$this->loggedIn) 
    header("Location: index.php"); 
elseif(($currentdir == "admin" && $this->userData['user_level'] < 3) || ($currentdir == "mgmt" && $this->userData['user_level'] < 2) || ($currentdir == "user" && $this->userData['user_level'] < 1)) 
    header("Location: ../index.php"); 

注意改變一個elseif的,因爲 - 正確如果我錯了 - 要麼是用戶沒有登錄並被重定向到index.php,要麼用戶已登錄並且可能被定向到../index.php。如果他們是獨立的,如果陳述,似乎可能最終成爲兩個位置標題。

+0

謝謝你。我已經找到了我喜歡的方式,查看我的問題帖子。 – Joshwaa 2011-04-21 01:06:57

+0

看起來不錯。儘管如何,您不能將$ this-> loggedIn檢查放在循環之外? – Compeek 2011-04-21 01:13:12