2012-09-12 55 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