2012-09-12 23 views
2

我正在创建一个用于管理线索的组件[线索或客户线索是从前端提交的],在这个组件中,我想实现一个像这样的ACL。在joomla中实现新类型的ACL 2.5

我的客户要求...

SuperAdmin 
|— Manager 
|—|— Administrator 

考虑Administrator正在Manager。请不要与Joomla默认的ACL进行比较。

所有线索都显示给superadmin.Superadmin将把线索分配给其他用户。

如果登录的用户是Manager,他能够看到所有用户主管下的Manager组&组Administrator组。

如果登录的用户是Administrator,他没有权限查看其他潜在客户,因为管理员没有任何子组,它是最后一个组。

我使用以下查询

$query->select('c.id as groupid,c.title AS group_name'); 
$query->from('#__usergroups AS c'); 
$query->join('LEFT', '#__usergroups AS s ON (s.lft <= c.lft AND s.rgt >= c.rgt) OR (s.lft > c.lft AND s.rgt < c.rgt)'); 
$query->where('s.id = "'.$UG.'"'); 
$query->order('c.lft'); 
$db->setquery($query); 
$gids   = $db->loadResultArray(); 
$gids   = implode(",",$gids); 

$UG =>登录的用户组识别符号。

如果登录用户是Manager$UG6

输出

groupid group_name 
    1   Public 
    6   Manager 
    7   Administrator 

如果登录用户是Administrator$UG7。其还返回相同的答案....我想输出为

如果Manager登录

输出将被

groupid group_name 
    6  Manager 
    7  Administrator 

如果登录

输出Administrator公司将

groupid group_name 
    7 Administrator 

或空

任何一个请帮助我.. ..

回答

3

终于让我找到了答案

添加的行AND s.lft <= c.lft AND s.rgt >= c.rgtwhere条件

$query->select('c.id as groupid,c.title AS group_name'); 
$query->from('#__usergroups AS c'); 
$query->join('LEFT', '#__usergroups AS s ON (s.lft <= c.lft AND s.rgt >= c.rgt) OR (s.lft > c.lft AND s.rgt < c.rgt)'); 
$query->where('s.id = "'.$UG.'" AND s.lft <= c.lft AND s.rgt >= c.rgt '); 
$query->order('c.lft'); 
$db->setquery($query); 
$gids   = $db->loadResultArray(); 

enter image description here