0

特定のユーザーにデータを表示したい。私はすでに似たようなことをしましたが、違いはロール番号が静的だったことです。たとえば、列を追加して特定のユーザーに '1' を与えたので、 if($role == 1) { do something } と書きました。静的な数値なので問題ありませんでした。このようにして、ロール 1 のユーザーにのみ秘密の情報を表示しています。

今、私は新しい機能を追加しました。管理者は、グループに属する特定のユーザーの情報をアップロードできます。団体の場合は情報が異なります。データは正常に保存および取得されます。それは私の問題ではありません。たとえば、グループAに属するユーザー「a1」、「a2」、「a3」にドキュメントAを表示したい(ランダムな名前です。簡単にしたいだけです)、ユーザー「a4」にドキュメントBを表示します。 'a7'、'a35'、'a40' (グループ B に属する) など。

ドキュメント「A」を保存/取得し、それをユーザー「a1」、「a2」、「a3」およびそのグループにリンクする方法は知っていますが、各ドキュメントをグループに表示する方法がわかりません。ドキュメント A は 1 つのグループにのみリンクできます (B、C、D なども同様)。

TABLES
DOCUMENTS
Number - Title - File
1 - Document A - A.doc
2 - Document B - B.doc

DOC_USERS
Doc N - User N
1 - 10
1 - 15
2 - 7

DOC_GROUPS
Doc N - Group N
1 - 1
2 - 2

以前のように if($role == 1) と言う代わりに.. if ($document == $group) のようなものが必要になります。ただし、静的ではないため、「A」や「B」などを入れることはできません。

何か助けはありますか?

4

1 に答える 1

1

このロジックをビューではなくクエリに移動します。パラメータとして user_id を渡し、ユーザーが表示できるレコードのみを返します。あなたのスキーマでは、ユーザーIDに基づいて、またはユーザーとグループとの関連付けによって、ドキュメントに権限を付与できるようです(テーブル構造には欠けているようですが、説明で言及しました)

select documents.*
from documents
     inner join doc_users on documents.number= doc_users.doc
where doc_users.user = ?

Union

select documents.*
from documents
     inner join doc_groups on documents.number= doc_group.doc
     inner join user_groups on user_groups.group = doc_groups.group
where user_groups.user = ?

このクエリはユニオンなしで実行できると確信していますが、これは読んで理解するのが非常に明確です。

于 2013-04-02T22:01:08.013 に答える