2013-05-05 93 views
0

我正在開發一個CMS作爲我的愛好,我被困在東西....在我的MySQL分貝我有不同類的用戶:管理員,普通用戶,退伍軍人,溢價等.... 。是否有一種方法可以創建一個包含每個用戶類設置的php文件?然後使用功能或東西來檢查某個用戶是否有權...創建一個頁面,例如...在我的CMS的用戶權利

目前我正在檢查用戶權限與會話...

If($_SESSION['user_type']=='Admin'||$_SESSION['user_type']=='premium'){ 
//do stuff 
}else if()......... { 
    // .............. 
    } 

,但我想是這一切

check_user_right(user_name); 
if ($can_create_page) == true{ 
do......}else{....} 

回答

2

首先,你應該知道,你應該在數據庫中存儲的用戶信息。然後,當有人登錄並驗證登錄名時,可以將他或她的用戶ID存儲在會話中,然後獲取所有其他用戶信息,如user_type,則將根據該ID查詢數據庫。不知道你是否還在這樣做,但如果你不是這樣,你應該是。

就用戶權限而言,您有兩種選擇。

的OOP方式

這是一個我建議。它需要創建一個User類,它封裝了從數據庫中檢索用戶的所有邏輯,並隨後檢查該用戶是否具有特定的權限。

class User { 
    protected static $_rights = array(
     'admin'=>array(
      'create_page','remove_page', etc... 
     ) 
    ); 
    public static retrieve($id) { 
     // Call to your database or persistent storage to retrieve user info based on id 
     return new static($retrieved_user_data); 
    } 

    public function has_right($right) { 
     return in_array($right, static::$_rights[$this->user_type]); 
    } 
} 

非OOP方式

這是級別低得多,並在此期間可以對你更好。基本上,您會爲每個用戶級別創建一組權限,並將其存儲在與用於檢查它們的函數相同的文件中。然後,該功能必須反過來被包含在你打算使用它的每一頁上。

例如,說你把函數在一個名爲functions.php文件,它看起來像這樣:

$user_rights = array(
    'admin'=>array('create_page','remove_page','edit_user',...), 
    'veteran'=>array('ban_user','edit_page'), 
    // Other rights here 
); 
function has_right($user_id, $right) { 
    global $user_rights; 
    // Retrieve information from persistent storage about the user 
    // which I'm assuming you will store in $user_info 
    return in_array($right, $user_rights[$user_info['user_type']]); 
} 

那麼你應該包含您要檢查用戶權限的任何其他文件這個文件,然後您所需要的只是用戶標識(登錄後存儲在會話中)和用戶類型,您可以從數據庫或其他持久性存儲獲取該用戶標識。

+0

對不起,我不知道如何使用它....你能給我一個更具體的例子嗎? :) – 2013-05-05 12:24:36

+0

我正在編輯我的答案來幫助你。 – jraede 2013-05-05 17:32:34

+0

非常感謝你,但我仍然在兩種情況下都有同樣的錯誤:警告:in_array()期望參數2是數組,在C:\ xampp \ htdocs \ site \ test \ drepturi.php中給出null在線10 – 2013-05-06 09:46:33