我想向特定用户显示一些数据。我已经做了类似的事情,但区别在于角色编号是静态的。例如,我添加了一个列并给特定用户'1',所以我写了if($ role == 1){do something}。这很好,因为它是一个静态数字。通过这种方式,我只向具有角色1的用户显示秘密信息。
现在我添加了一项新功能;管理员可以上传属于组的特定用户的信息。组的信息会有所不同。存储和检索数据就好了。那不是我的问题。例如,我想将文档A显示给A组中的用户'a1','a2','a3'(它是随机名称,我只是想让你更容易),将文档B显示给用户'a4', 'a7','a35','a40'(属于B组)等等。
我知道如何存储/检索文档'A'并将其链接到用户'a'','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
而不是像我之前那样说($ role == 1)..我需要像if($ document == $ group)这样的东西。 我不能把'A'或'B'或者其他什么因为它不是静态的。
有任何帮助吗?
答案 0 :(得分: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 = ?
我确信这个查询可以在没有联合的情况下完成,但是阅读和理解这一点非常清楚。