2012-08-17 64 views
0

我有四種不同類型的用戶登錄我的網站,如adminsuperadmin,companyemployees。他們每個人都有不同的頁面集,但也有一些常見的頁面。現在我有四個不同的表格來管理它們,登錄屏幕爲adminsuperadmin。當adminsuperadmin登錄時,我將在提供訪問權之前逐一檢查兩個表。我有一個單獨的登錄屏幕companyemployees。這是接受的方式嗎?改進登錄系統

實際上,我希望將其更改爲一個包含所有用戶和一個角色表的用於區分角色的表。我相信一張四桌的概念真的很糟糕。我不能簡單地將它放在一張桌子上,因爲以前的開發人員習慣於在網站上使用的文本文件中保存用戶評論和用戶活動。

我是否認爲四表登錄系統不好?將日誌存儲在網站中直接使用的文本文件中是不是一個好主意?

回答

5

你有4張桌子嗎?只需使用一個用戶表和一個可以是'admin','superadmin','company'或'employees'的字段。那麼你可以擁有無​​限種類的賬戶。 (我會做數字代碼,如1,2,3或4代替字符串代碼或ENUM類型字段)。

但是,你的單桌的想法是好的。如果您需要一個角色表,請爲您的角色字段添加一個外鍵並將其鏈接到您的角色表。對於不同的用戶,您可以擁有一個登錄名,而不是不同的登錄名,並根據該外鍵值檢查權限。

+0

感謝您對登錄系統的建議,並且您對日誌有任何建議嗎? – Deepak 2012-08-17 02:37:16

2

首先,你可以用一張表完成整個事情。在該表中,您應該有像用戶名,密碼,typefuser和其他必要信息的字段。

檢索用戶信息,如:

$username = $_POST['username']; //Retrieving a username from HTML login form 
$row = mysql_query(sprintf("SELECT * FROM table WHERE username ='%s'", mysql_real_escape_string($username))); //Retrieving a row from the database 
$res = mysql_fetch_array($row); 
$type = $row['typeofuser']; //Retrieving whether it is administrator, super administrator, user, etc. 
if ($type == "admin") 
    header(Loction:adminpge); 

同樣,你可以檢查任何類型的用戶,可以重定向到另一頁。

+0

我已經編輯了一些部分,如果你有任何懷疑可以隨意問。 – 2012-08-17 00:39:44

+2

@Anoopss Golden如果你發佈了代碼,你應該確保它是正確的/當代的。你正在使用不推薦的'mysql_ *'函數,並且有一個大膽的sql注入漏洞。 – jeroen 2012-08-17 00:46:28

+0

'mysql_query(SELECT * FROM table WHERE username ='$ username');'和'header(Loction:adminpge);'不正確。忘了一些引號.. – 2012-08-17 01:10:39

4

這裏是我的建議,

而不是使用爲您的用戶四張表的,這將是更好地使用一個

您可以創建基本的user表是這樣的(變化軍銜什麼適合你的網站/腳本):

ID username password email bla bla bla rank 

因此而不是使用四個表,你可以讓你的PHP腳本檢查用戶是否有所需的訪問級別。

這裏有一個簡單的功能,以保護網頁從較低訪問級別的用戶:

function required_level($level){ 
    $user_level = mysql_return(mysql_query("SELECT $rank FROM `Accounts` WHERE `user_id` = $user_id")); 
    if($user_level<$level){ 
     header("Location:index.php"); 
    } 
} 

然後你想從低級別用戶訪問來保護每一頁上。您可以撥打required_level(4);,該頁面只允許具有此級別或以上的用戶訪問該頁面。

實施例:

  • Bob是一個僱員,所以他具有1的用戶級別,
  • Joe是一個超級管理員所以他的4

一個用戶級別兩個用戶通常登錄,並且都嘗試訪問admin.php

admin.php以required_level(4)開頭;因此Bob會被重定向到主頁(您也可以傳遞錯誤),但是Joe會打包訪問此頁面,因爲他的排名與訪問此頁面所需的排名相同或更高。

所以,這裏是我可以做的超長解釋!我希望這可以幫助你,並給你一些想法,如何讓你的用戶表更好,更容易創建保護頁:)

+0

感謝您的回覆..您對日誌有任何建議嗎? – Deepak 2012-08-17 02:38:04

+0

@Deepak你想要登錄什麼?登錄或管理員/用戶在做什麼? – BExDeath 2012-08-17 02:51:41

+0

如果某些用戶在註釋中鍵入,它現在保存在日誌文件而不是數據庫中。這種做法是否以任何方式被接受? – Deepak 2012-08-17 03:11:33