0

我想向特定用户显示一些数据。我已经做过类似的事情,但不同之处在于角色编号是静态的。例如,我添加了一列并将“1”分配给特定用户,所以我写了 if($role == 1) { do something }。这很好,因为它是一个静态数字。通过这种方式,我只向角色 1 的用户显示秘密信息。

现在我添加了一个新功能;管理员可以上传属于某个组的特定用户的信息。组的信息会有所不同。数据存储和检索都很好。那不是我的问题。例如,我想向 A 组中的用户 'a1'、'a2'、'a3' 显示文档 A(这是随机名称,我只是想让你更容易),向用户 'a4' 显示文档 B, 'a7','a35','a40'(属于 B 组)等等。

我知道如何存储/检索文档“A”并将其与用户“a1”、“a2”、“a3”和他们的组链接......但我不确定如何将每个文档显示给一个组。文档 A 只能与一组链接(对于 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 回答