2014-03-02 91 views
0

这是我的第一篇文章,所以我希望我已经使用了正确的地方.........筛选结果(3.2.2的Joomla)

如果任何人都可以用这个查询帮助我将非常感激。

我在我的网站上有一个数据表,需要对其进行定制,以仅显示基于登录用户分配给的用户组访问级别的允许信息。所以这是我当前的查询,它显示了当前登录用户根据他们注册的电子邮件所做的记录。因此,例如,如果我在'标准'用户组中有5个用户,并且他们每个都创建一条记录,通过这个查询,他们可以分别查看他们自己的记录,如果用户处于'高级'用户组,他们需要的是他们可以查看自己的记录以及“标准”用户组中用户创建的任何记录。这是在joomla网站上,不知道这是否有所作为,但所有的访问级别由CMS定义,我不能在查询中拥有实际用户组的名称,因为它们会有许多不同的名称,它需要找到基于谁是登录的电子邮件地址/用户的ID的用户组。

SELECT (CASE WHEN state = '1' THEN 'Accepted' WHEN state = '-2' THEN 'Waiting' WHEN state = '-1' THEN 'Archived' WHEN state = '0' THEN 'Rejected' ELSE 'Unknown' END) AS Status, s.names, s.phone, FROM_UNIXTIME(datetime1,'%d/%m/%y %T'), s.begin, s.PickupAddr1, s.end, s.PickupAddr4, s.message, s.selpassengers, s.selluggage, IF(s.returntrip=0, 'No', 'Yes'), IF(FROM_UNIXTIME(datetime2,'%Y') = '1970', NULL, FROM_UNIXTIME(datetime2, '%d/%m/%y %T')), tc.title AS Vehicle, s.cprice, pm.title As Payment, s.payment, s.selinfantseats, s.selchildseats, s.selboosterseats, s.selcarry, s.email, s.id, s.prepay, s.vehicletype FROM #__taxibooking_orders s 
INNER JOIN #__taxibooking_cars tc ON tc.id = s.vehicletype 
INNER JOIN #__taxibooking_paymentmethods pm ON pm.id = s.payment 
WHERE s.email = {$UserEmail} 

我需要做的是修改此使得所显示的记录是由那些在任何特定用户组创建。

对谁创造的记录是“taxibooking_orders”表 的用户组中的“群组”表中定义的“邮件”字段 的用户在“用户”表里面也有一个定义的参考“电子邮件'字段

非常感谢您的帮助。

+2

为什么你不使用Joomla中的标准API进行基于权限的过滤?这一切都内置到Joomla中,所有标准的核心扩展都告诉你如何做到这一点。另外,为什么你会使用电子邮件而不是用户ID?访问级别由网站管理员设计,而不是由CMS设计,CMS为您提供了使权限对您有意义的权力。 – Elin

回答

0

我不知道Joomla 3.2(还),但Joomla 2.5有一个表#__user_usergroup_map它将用户ID映射到用户组ID。因此,你必须修改WHERE部分是这样的:

WHERE s.email={$UserEmail} AND s.id IN (SELECT user_id FROM #__user_usergroup_map WHERE group_id=<yourgroupid>); 

=>这是获得记录,如果用户是在用户组。如果您想为任何用户执行此操作,请跳过s.email = {$ UserEmail}部分。

虽然我会同意艾琳在这两种情况下使用id而不是电子邮件地址。

+0

谢谢Elk。我看到你在说什么,但是我不能在查询中定义用户组,因为会有很多用户组,所以必须为每个用户组创建一个新的实例,这正是我想要避免的。然而,我发现了一个扩展,它似乎能够完成我所需要的功能,所以会尝试一下,看看它是如何发展的。 – user2999578