2012-01-11 185 views
1

我正在使用PHP + MySql的應用程序。在我的應用程序中,我有一個用戶表,一個關係表(朋友,關注,訂閱)和一個表格。對用戶來說,主要的操作是:如何管理用戶訪問權限和用戶權限

  • 用戶有朋友
  • 用戶可以發佈條目
  • 用戶可以看到朋友條目
  • 最後用戶可以阻止條目查看了特定的朋友

如果用戶A是用戶B的朋友,那麼用戶A可以看到來自用戶B的所有條目。但是用戶B可以例如限制只有幾個朋友的訪問。現在查詢是:我如何管理這些權限?我正在考慮一張表格,用於存儲每個被查看特定條目的用戶,但一旦單個用戶可以擁有幾個朋友,這不會是一個好主意。那麼,我該如何解決這個問題?有人可以告訴我如何開始?也許是在Google上搜索的正確術語或類似的鏈接。

+0

也許ACL(訪問控制列表)是讓您開始使用的術語。 – 2012-01-11 01:01:20

+0

* \ *嘆息\ **另一個社交網絡...可能重複? http://stackoverflow.com/questions/3122772/how-are-viewing-permissions-usually-implemented-in-a-relational-database – Mike 2012-01-11 01:17:16

回答

1

你在正確的軌道上。你將要使用鏈接表。你會從一個表格用戶開始。每個用戶都有一個ID。然後創建一個users_friends表。這個表格由兩個id,user_id和friend_id組成。最後一個表將是users_restricted,它也將由兩個id,user_id和restricted_id組成。

例如

users 
user_id name 
1  user1 
2  user2 
3  user3 

users_friends 
friend1_id friend2_id 
1   2 
2   3 

這表示用戶1和2是朋友,用戶2和3是朋友。 (這是假設,如果用戶1是朋友與用戶2,則用戶2也是朋友用戶1)

users_restricted 
user_id restricted_id 
1  2 

現在即使用戶1和用戶2是朋友,用戶2是在限制名單的意義別•允許用戶2查看用戶1的條目。

您可以看到表格通過ID鏈接,所有ID都來自用戶表格。這可以擴展爲與條目相關。只需通過他們的ID參考條目。

要讓用戶阻止特定條目,您將擁有以下表格。

entries 
entry_id user_id ... other columns holding entry information 
1  1 
2  1 
3  2 
4  2 

現在用戶1已經由2個條目(條目1和條目2)和用戶2已取得2個條目(條目3和條目4)。另一張桌子將持有這些限制。

entries_restricted 
entry_id restricted_user_id 
1  2 

這可以說用戶2無法查看條目1.

爲了讓用戶2您的發言會是這個樣子可見的條目。

SELECT e.*, er.entry_id FROM entries e JOIN entries_restricted er ON e.entry_id=er.entry_id WHERE er.restricted_user_id != 2; 

的語句選擇所有不含限制用戶2

+0

好吧,我明白了。但問題是:用戶能夠阻止**特定**條目,而不是所有條目。我該如何處理? – 2012-01-11 03:40:46

+1

我編輯了我的答案來處理特定條目。 – 2012-01-20 21:59:40

0

您可以開始使用下表條目中條目的信息。 第一個表是用戶表(如Jason。沃爾夫史密斯建議)

users 
u_user_id  u_name 
1    user1  
2    user2  
3    user3  

第二個表可以是這樣的。

friends_permissions 
f_user_id f_friend_id permission entries 
1   2    1  entry1   
2   3    0 
1   3    1  entry3 

此表將包含應允許查看的條目的權限和名稱。 1 - 限制一些條目; 0 - 允許所有。 在列權限數據類型可能設置爲SET('1','0')和數據類型條目 NULL。
因此,user1不允許查看user1的entry1。 (entry1和entry3來自條目表)。