2009-07-09 145 views
0

我建立一個用戶通知系統網站,涉及2級登記在:管理和客戶衝突的用戶管理設計

我已經全部用戶的註冊領域到一個單一的登記表:

uid 
email 
password 
owner 
cid 
admin 

當管理員級用戶被插入時,當客戶端級別的用戶被插入管理員列標記有1

,管理員列是0,則所有者設置爲管理員的UID。

管理員級別的用戶不能修改客戶端用戶的密碼

客戶端級別的用戶可以屬於多個管理員

多個管理員可以共享相同的客戶端級別的用戶,以便有可能爲其他管理員有客戶誰是管理員

問題 當一個管理員用戶創建自己的客戶端用戶,客戶端用戶可以享受該網站,可能想爲管理和設置註冊可能相同重複的用戶使用相同的EM與不同的密碼。如果發生這種情況,客戶端將成爲管理員,那麼管理員是否仍是前一個管理員的客戶端存在問題。

實施例: 鮑勃註冊爲管理員和設置了傑克作爲客戶端用戶。傑克使用該網站並喜歡它。他轉身並註冊爲管理員帳戶用戶,並將Bob作爲其客戶用戶。

的問題是你有這導致登錄衝突2 DIFF密碼郵件的

顯然,這是一個不好的設計中得到去,可以很容易地用一個唯一的用戶名/密碼組合解決;然而;我想知道在這種情況下,保留電子郵件地址作爲用戶名時,社區可能會提供哪些其他建議。

最終目標 我最後這個問題的目標是我試圖找出如何社交網站不僅可以管理自己的用戶,而且他們如何建立「友誼」爲好。

回答

0

最簡單的解決方法是在驗證用戶添加另一層:用戶類型。

當在他們的人的日誌都帶有以下:

  1. 一個下拉與兩個用戶類型選項mneu(用戶,管理員)
  2. 用戶名字段
  3. 密碼字段

用戶只認爲是成功進行身份驗證時,所有三個領域相匹配的是在數據庫中。這樣你就可以根據用戶類型知道要顯示的功能。

1

你爲什麼不能把上的電子郵件唯一約束?這將確保用戶不能使用相同的電子郵件創建多次。

當你創建一個新用戶時,你只需要做一個快速的數據庫檢查電子郵件地址。


SELECT uid from users where email = '$email'; 
if (userexists) { 
//update admin = 1 where uid = $uid; 
} else { 
//insert 
} 

僞代碼的appoligies - 我主要是php,你沒有提到你的語言。

這當然假設這是一個新的系統,並且你目前沒有重複的電子郵件(它不會讓你把約束放在如果你這樣做)。然而,你可以寫一個腳本很容易夠得重複

SELECT email, count(*) as dupes FROM users GROUP BY email HAVING dupes > 1;

然後我只想用這個人具有最高水平,刪除重複的。

這種方法的好處之一是,您將維護所有者,並且能夠跟蹤那些現在是管理員並擁有y客戶的客戶,因此客戶y原本是x的結果。

如果根據用戶級別有不同的頁面我過去所做的就像Ankur所說的那樣對於任何一個登錄都有一個下拉菜單。但是,我只是檢查管理員和管理員的客戶端是否爲admin == 1 < = 1。

1

有一些差距的要求:

  • 可以在客戶端屬於多個管理 - 我會認爲答案是肯定的
  • 可以管理員修改客戶端的信息(密碼等。 ) - 我會認爲答案是否定的

我想表的設計有一些缺陷

  • 所有者/ ADMI n場起到同樣的作用 - 既表明層次
  • 有,如果他們已經被邀請參加一個「客戶」或由何人

我推薦兩個表無指示: 用戶表

  • 用戶ID
  • 密碼
  • 加入日期

UserRelation

  • 的userid
  • CLIENT_ID
  • CLIENT_ACTIVE(作爲客戶端處理的人的用戶ID)(如果客戶接受了邀請)
  • date_invited
  • date_accepted
  • 狀態(有效/ not-active)

所以,有一個1到ma在User和UserRelation表之間。您可以確定用戶是否是「管理員」(如果他們已接受客戶端),用戶不必再註冊一次以成爲客戶端,並且用戶可以關聯。與許多管理員...(還有一些其他的好處)

+0

這些都是一些很好的問題..我會填補上述空白 – phill 2009-07-10 13:24:38