0

現在、企業 ID に基づいてドキュメントへの「パブリック」アクセスを提供する単純なドキュメント管理システムを使用しています。ユーザーごとにアクセス制御を実装したいと考えています。PHP でアクセス権などを確認する方法には満足していますが、承認されたユーザーを効率的にテーブルに維持する方法がわかりません。

ドキュメントはパブリック アクセスまたはプライベート アクセスを x ユーザーに制限することができますが、x の値がわからないため、MySql で user1、user2 などと呼ばれる複数のフィールドを実装する意味がありません。

users という名前のテーブルと、documents という名前のテーブルがあります。users to docs と呼ばれる新しいテーブルは意味がありますか、またはこれを実装するより良い方法があるので、ユーザーがドキュメントにアクセスしようとした場合にアクセスする資格があるかどうかを確認できますか?

4

1 に答える 1

1

最良の方法は、リンクテーブルを用意することです。

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

table #3: user_documents (user_id, document_id)

ここで、user_id と document_id は、users テーブルと documents テーブルを指す外部キーです。

user_documents にレコードが存在する場合、ユーザーはドキュメントにアクセスできます。さまざまなレベルのアクセス (読み取り/書き込み/など) を実装する必要がある場合は、それを user_documents テーブルと追加のフィールドに格納します。

比較すると、次のようなものがあった場合

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

doc# フィールドがこのユーザーがアクセスできるドキュメントを指している場合、N 個のドキュメントのアクセス許可を処理するには、テーブルに N 個のフィールドが必要です。N 個のドキュメントに対する権限を持っているユーザーがごく少数で、ほとんどのユーザーの権限がはるかに少ない場合、未使用のフィールドで多くのスペースを浪費することになります。また、N+1 ドキュメントを必要とするジョーカーが常に存在します。つまり、毎回テーブルを変更することになります。

リンク テーブルを使用すると、これまでに 2 つのフィールドしかなく、ユーザー/ドキュメント アクセスのペアと同じ数のレコードしかありません。

于 2012-09-07T21:27:36.560 に答える