有一个项目目录。每个项目都位于类别下。对于每个类别,我们可以拥有具有不同权限的用户(管理员,专家,用户)。当我们添加项目时,我们选择可见性: (1) - 对所有人都可见 (2) - 仅对此项目发布的类别的管理员和专家可见 (3) - 该项目的所有成员均可见此项目已发布 (0) - 为所有人隐藏(只有创作者可以看到)。
假设我在标题中有500个带有“键盘”字样的项目。他们中的大多数属于不同的类别。只有1项论文500具有隐私 - 2(对于该类别的专家和管理员可见)并且位于“Logitech”类别下。当我作为“Logitech”类别的管理员在搜索中键入类型“键盘”时,我应该看到搜索找到了500个项目,并向我显示其中的10个。如果只是普通用户(不是管理员或专家),在他将看到的搜索中键入“键盘”,搜索找到了499项,并向他显示了499项中的10项。
是要抓取20个而不是10个并检查每个项目的隐私,然后在搜索结果中只显示10个项目唯一可能的解决方案?但是如果所有这20个都“为用户隐藏”会怎样呢?
提前感谢您的回复。
数据库草图:
1)项目[id,title,category_id,visibility]
2)类别:[id,title]
3)category_user [id,user_id,category_id,role(expert,admin,user)]
4)用户[id,name]
答案 0 :(得分:1)
这样的事情可能会起到作用:
SELECT i.*,c.*,cu.*u.*
FROM items i,categories c, category_user cu, user u
WHERE i.title LIKE '%$search%'
AND i.category_id=c.id
AND cu.category_id=c.id
AND u.id=cu.user_id
AND cu.role='expert'
AND i.visibility=1
根据userdata更改cu.role和i.visbility。