2013-03-10 88 views
1

作爲標題,當我有一個內容列表時,但不是每個人都可以看到它們。 例如: 我有組1和組2 我創建了一個帖子,只有組1中的用戶才能看到它。 我創建了另一篇文章,只有組2中的用戶才能看到它。如何創建具有訪問權限檢查的列表

用戶1組1,用戶2組2 然後,當用戶1查看最新內容列表,他只能看到帖子1. 然後,用戶用戶2查看最新的內容列表,他只能看到帖子2.

你可以看到,不同的帳戶(用戶)會在他/她的帖子列表中看到不同的帖子。因爲我將所有帖子存儲在一張表中,並且在其中存儲了group_id,因此在爲用戶創建最新帖子列表時,我必須搜索所有最新帖子並逐個檢查用戶是否可以看到它,如果有他沒有許可的帖子太多,表現會很糟糕。

另外,在某些情況下,該組不是靜態的,例如:我的追隨者,我的朋友,如果是這樣,我仍然無法將用戶標識存儲在郵政表中,並且必須計算他們的關係以確定他/她可以閱讀這篇文章或不閱讀。再次,該帖子可以與多個權限組(我的追隨者和我的朋友可以看到它)。

我該如何改進?

順便說一句,爲什麼我不插入user_id數組在郵件記錄,因爲也許組用戶數量非常大,所以我只能在其中保存group_id。

順便說一句, 我有一個SNS網站。 我使用mongodb數據庫。 我使用php。

回答

1

當用戶授權時,將他的group_id存儲在會話數據中。然後,您可以在生成菜單時使用該group_id,使其成爲數據庫查詢中的一個額外條件,以僅獲取允許查看該組的帖子。

如果用戶沒有授權,您可以使用一些默認的group_id值來顯示只允許所有人查看的帖子。

對於複雜的條件,如你有我推薦使用UNION如果你有MySQL,但看起來你只需要做多個查詢。首先,分離所有可能的內容組應該可用於特定用戶的不同條件。

例如:如果用戶只能看到他的小組,他的朋友和他跟隨的人的內容,可以簡單地做3個請求(獲取他的小組的內容列表,他跟隨的人的帖子和他的朋友的帖子)和然後將這些數據與PHP結合並輸出。由於所有的數據都是相同的(正如你所說 - 這一切都在posts表),你不會在這裏需要任何東西。只需三個請求,並按照你想要的方式在PHP端進行排序。

+0

但問題是,有些組不是靜態的,是活動組,例如:我的朋友可以看到這篇文章或我的追隨者可以看到它。所以我必須計算它們之間的關係。 – Elsonwu 2013-03-10 10:34:25

+0

@Elsonwu當任何用戶請求一個網站時,您將他的權限寫入他的會話數據中。然後,根據該權限,挑選要顯示的內容。 – Ranty 2013-03-10 11:50:34

+0

@Elsonwu更新後的文章 – Ranty 2013-03-10 12:18:06

相關問題