0

有一个项目目录。每个项目都位于类别下。对于每个类别,我们可以拥有具有不同权限的用户(管理员、专家、用户)。添加项目时,我们选择可见性:(1) - 对所有人可见 (2) - 仅对发布此项目的类别的管理员和专家可见 (3) - 对发布此项目的类别的所有成员可见(0) - 对所有人隐藏(只有创建者可以看到)。

假设我有 500 个标题中带有“键盘”一词的项目。他们中的大多数属于不同的类别。500 篇论文中只有 1 项具有隐私权 - 2 项(该类别的专家和管理员可见)并位于“罗技”类别下。当我作为“Logitech”类别的管理员在搜索中键入“键盘”时,我应该看到搜索找到了 500 个项目,并显示其中的 10 个。如果只是一个普通用户(不是管理员或专家),在他将看到的搜索中键入“键盘”,搜索找到了 499 个项目,并向他显示了这 499 个项目中的 10 个。

抓取 20 个项目而不是 10 个项目并检查每个项目的隐私,然后在搜索结果中仅显示 10 个项目是唯一可能的解决方案吗?但是,如果这 20 个都“为用户隐藏”呢?

提前感谢您的回复。

数据库草图:

1)items[id, title, category_id, visibility]

2) 类别:[id, title]

3) category_user[id, user_id, category_id, role(expert, admin, user)]

4) 用户[id, name]

4

1 回答 1

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

根据用户数据更改 cu.role 和 i.visbility。

于 2012-08-09T13:30:35.677 回答