2012-08-10 93 views
0

這是我在這裏的第一個問題,我相信問題不存在已經:)我搜索但沒有成功。Php管理員面板與用戶權限

好的,我有下一個問題。 我需要一些想法如何在管理面板中執行用戶權限。 我想要一個超級管理員,管理員和操作員。 任何人都會擁有不同的權限。 超級管理員將擁有所有權限,一些管理員和一些操作員但不是全部擁有相同的權限。 我需要一個後端邏輯。 如何做到這一點,沒有太多的if語句,所以我的代碼看起來不錯? 我使用我自己寫的Smarty模板引擎和oop php。 我將與Smarty特權分配,但下一步是什麼? 任何人都可以給我想法或一些示例代碼?

謝謝!

+0

你想給什麼級別的權限? – Steve 2012-08-10 23:25:17

+0

您可以將用戶級別設置爲常量,然後使用if/else語句。這實際上比你想象的要簡單得多。 – Tom 2012-08-10 23:28:11

+0

你可以檢查phpadminpanel.com – vectorialpx 2013-01-28 23:35:59

回答

3

使用MVC這是一個相對簡單的任務。在一個名爲permissions的表中創建不同的角色,然後在另一個名爲user_permissions的表中將user_id連接到permission_id。然後創建一個函數,也許在名爲user的類has_role()中。該函數接受兩個參數:權限別名和最終用戶標識。

如果你想避免在視圖中調用函數,你可以在你的控制器保存不同的變量,這些變量傳遞給視圖,如:

$isAdmin = $user->has_role('admin'); 
$isOperator = $user->has_role('operator'); 

如果你只顯示某些內容管理員,你可以做這樣的事情在你的看法:

<?php if($isAdmin): ?> 

<p>Admin only content</p> 

<?php endif; ?> 

但是,如果你只有管理的頁面,乾脆把

if(! $this->user->has_role('role')) { 
    header("Location: /index.php"); 
    die(); 
} 

會做伎倆。所有這些當然都可以在沒有MVC部件的情況下實現,但是它變得更加清潔。

+0

非常感謝...我想過分配一個變量,如$ level = $ user-> has_role($ user_id);所以我在頁面上有三個if語句幷包含一個不同的html頁面,你認爲這是一個好的選擇?我不擔心數據庫只是關於使用html在頁面上組織的代碼。 – consigliere 2012-08-10 23:40:30

+0

@consigliere當然。您可以爲每個權限分配一個「訪問級別」,其中超級管理員可能是最高等級的。它並沒有真正做任何不同的事情,但如果這是您更喜歡的 - 堅持它! :)爲了能夠將常規用戶與管理員等分開,這些if語句是必需的。 – Zar 2012-08-10 23:42:33

+0

還有一件事要問:)我有更多的文件,header.tpl,nav.tpl其中包含導航,並且頁面的主要內容是來自數據庫的數據。例如,運營商無法看到導航中的用戶鏈接,但超級管理員可以,所以我會有一個,如果在nav.tpl中,並在另一個頁面的主secion如果什麼文件來插入顯示數據,實際上我會有一個兩個if聲明一件事。這是好還是壞?如果不好,我可以如何避免這一點,但要保持更多tpls文件被包含在一個邏輯中。我只是擔心速度和執行時間。 – consigliere 2012-08-10 23:54:17

1

也許你可以通過分割你的管理視圖(大概每種類型的用戶獲得不同的UI體驗)然後根據用戶的特權包含正確的文件來做到這一點?

Tbh,如果不知道你的OOP框架的工作原理,這很難回答,因爲這將定義你如何解決問題。

0
class Session { 

    public static function init() { 
     @session_start(); 
    } 

    public static function set($key, $value) { 
     $_SESSION[$key] = $value; 
    } 

    public static function get($key) { 
     if (isset($_SESSION[$key])) { 
     return $_SESSION[$key]; 
     } 
    } 

    public static function destroy() { 
     //unset($_SESSION); 
     session_destroy(); 
    } 

} 

後來你在登錄PHP設置的角色,$數據[ '角色']你從MySQL得到:

Session::init(); 
    Session::set('role', $data['role']); 

,並檢查角色使用,例如:

$role = Session::get('role'); 
    if ($role != 'owner') { 
     Session::destroy(); 
     header('location: '.URL.'login'); 
     exit; 
    }