2

リードを管理するための1つのコンポーネントを作成しています[リードまたはクライアントリードはフロントエンドから送信されます]。このコンポーネントでは、このようなACLを実装したいと思います。

私のクライアントの要件...

SuperAdmin
|—  Manager
|—|— Administrator

考慮しAdministratorManagerください。joomlaのデフォルトACLと比較しないでください。

すべてのリードはsuperadminに表示されます。Superadminはリードを他のユーザーに割り当てます。

ログインしたユーザーがである場合、彼はすべてのユーザーがグループおよびグループManagerの下にいるユーザーをリードしていることを確認できます。ManagerAdministrator

ログインしたユーザーがの場合、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=>ログインしたユーザーgroupid。

ログインしているユーザーがManager、で$UGある場合、6

出力

 groupid    group_name
   1         Public
   6         Manager
   7         Administrator

ログインしているユーザーがAdministrator、で$UGある場合、7それも同じ答えを返します。

Managerログインしている場合

出力は

 groupid    group_name
   6      Manager
   7     Administrator

Administratorログインしている場合

出力は

 groupid    group_name
   7    Administrator

または空

誰か助けてください…。

4

1 に答える 1

3

最後に私は答えを見つけました

条件に行AND s.lft <= c.lft AND s.rgt >= c.rgtを追加where

$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();

ここに画像の説明を入力してください

于 2012-09-12T09:37:54.203 に答える