0

私はphp/mysqlアプリケーションを持っています。フォルダを持っているユーザーがいます。フォルダの深さは 1 レベルのみです。各フォルダーには無制限の数のドキュメントを含めることができます。関連するテーブルは次のとおりです。

ユーザーテーブル:

user_id(PK), name, password, etc

folder_table :

folder_id(PK), name, user_id(FK into user_table)

ドキュメント テーブル

document_id(PK), user_id(FK), folder_id(FK), date, name, etc

フォルダーとドキュメントを操作するすべてのクエリは、次の形式です。

select/update/insert <blah, blah, bhah>
where user_id = %d

現在、ユーザーがフォルダーを他のユーザーと共有できるようにすることを検討しています。私はこれを可能な限り混乱の少ない方法で行いたいと思っています。また、結果の WHERE 句の実行時のオーバーヘッドを最小限に抑えたいと考えています。

私は頭を悩ませてグーグルで調べてきましたが、十分に簡単な解決策を見つけていません。UNIX の (読み取り、書き込み、実行) と (所有者、グループ、その他) のメカニズムに似た方法で実装することを考えることができます。しかし、私の謙虚なシステムには少し複雑すぎるようです。

どのアプローチを取ることができるかについて、誰かが私に指針を与えることができれば、本当に感謝しています. 私の目標は単純です。

  1. システムは大幅な手直しを必要としない
  2. 少なくとも、ユーザーは他のユーザーまたはグループとフォルダーを共有できる必要があります (必要に応じてグループの概念を追加します)。
  3. 現在のものとは対照的に、SQL ステートメントの WHERE 句に過度のオーバーヘッドがあってはなりません (以下のように単純ですWHERE user_id = %d) 。
4

1 に答える 1

2

ユーザーとフォルダを共有する

列を持つテーブル *folder_user* を追加できますfolder_id(FK), user_id (FK)

user_id*folder_table* の は、フォルダーの所有者を表します。所有者がこのフォルダーを別のユーザーと共有する場合、folder_id と user_id (フォルダーの共有者) をfolder_userテーブルに追加します。

後で、access (enum 'READ', 'READ_WRITE')同じテーブルに列を追加して、ユーザーがフォルダー内のドキュメントを編集できるかどうかを確認できます。

グループとフォルダを共有する

  1. テーブルグループが必要です
  2. 次に、ユーザーをグループに追加する必要があるため、テーブル *user_group* を追加します。user_id(FK), group_id(FK)
  3. 次に、フォルダへのアクセス権をグループに付与するには、テーブル *folder_group*: folder_id(FK), group_id(FK) を追加して、フォルダへのアクセス権をグループに付与します。
于 2012-05-09T12:43:08.217 に答える