2012-09-07 88 views
0

我目前提供的「公共」訪問基於公司ID文檔的簡單文檔管理系統 - 我想實現對用戶的基礎用戶的訪問控制。我很高興看到如何在PHP中檢查訪問權限等,但並不確定如何以最有效的方式在表格中維護已批准的用戶。文檔訪問權限

一個文檔可以有限於X用戶公共訪問或私有訪問,正如我不知道X也沒有意義,以實現多個字段中的值在MySQL被稱爲用戶1,用戶2等

有一個表格已經叫做用戶,一個叫做文檔。將一個新的表稱爲用戶文檔意義還是有實現這個,所以我可以檢查用戶是否有權,如果他們試圖訪問該文檔更好的辦法?

+2

讀取多達約[歸一化(http://en.wikipedia.org/wiki/Database_normalization)。不要將多個字段添加到單個表中。如果你沒有'n'用戶,或者你最終在某個時候需要'n + 1',你最終會浪費字段。把用戶放到一個單獨的表中。 –

+0

用戶已經在單獨的表 - 你的意思是在不同的表放在用戶的訪問權限,如表打了個比方users_to_docs? – bhttoan

+0

沒有。您有一張用戶表,一張文檔表,然後是一個user_documents表,它將用戶鏈接到文檔。 –

回答

1

最好的方法是有鏈接表,例如

table #1: users (id, ...) 
table #2: documents (id, ....) 

table #3: user_documents (user_id, document_id) 

其中USER_ID和DOCUMENT_ID是在用戶和文檔表格

如果記錄存在於user_documents,則用戶訪問文件指向外鍵。如果你需要實現不同級別的訪問(讀/寫等),你可以將它存儲在user_documents表中以及額外的字段中。

相比之下,如果你有這樣的事情

table #1: users (id, doc1, doc2, doc3, etc...) 

其中DOC#字段指向該文件的用戶可以訪問的,你必須在表中具有N個字段來處理N個文檔的權限。如果只有少數用戶擁有N個文檔的權限,而且大多數用戶的權限少得多,那麼您會在未使用的字段上浪費大量空間。而且總會有一些需要N + 1個文檔的小丑,這意味着你每次都在修改你的表格。

與鏈接表,你只有2場,永遠,只有儘可能多的記錄,因爲有用戶/文檔訪問對。