1

所以我从后端在 Joomla 中创建了一些自定义用户组。我将注册用户放在这些自定义组下。小组是这样的-

公共
|— 用户
|—|— 审核员
|—|— Custom_group1
|—|—|— Custom_group2
|—|—|—|— Custom_group3
|—|—|—|—|— 管理员
|—|—|—|—| —|— 超级用户
|—|— Custom_group4

因此,假设它user_b在 groupCustom_group4和 下Custom_group3,自定义组 3 和 4 的 id 分别为 2 和 11(比如说),MySql 数据库看起来像 -

表:#__users

id       name           username           email               password     
523     User A          user_a          user_a@mysite.com      blablabla...
524     User B          user_b          user_b@mysite.com      blablabla... 

表:#__user_usergroup_map

user_id(Foreign Key to #__users.id)       group_id(Foreign Key to #__usergroups.id)
    523                                       8
    524                                       2
    524                                       11

您可以看到为用户 id 524 分配了两个组。现在我有这个 PHP 代码来获取用户的组 id(用户 id-524)

        $user = JFactory::getUser();
        $userId = $user->id;
        $db = JFactory::getDbo();
        $recursive = False;

        // Build the database query to get the rules for the asset.
        $query  = $db->getQuery(true);
        $query->select('ug.group_id');
        $query->from('#__user_usergroup_map AS ug');
        $query->leftJoin('#__users AS a ON a.id = ug.user_id');
        $query->where('a.id = '.(int) $userId);

        // Execute the query and load the rules from the result.
        $db->setQuery($query);
        $result = $db->loadResult();
        print_r((array)$result);

其中,我得到了输出-

Array([0] => 2)

但我希望它是Array([0] => 2, [1]=> 11)

谁能帮我?

4

1 回答 1

0

解决了。

我在这里查看并找到了一个类似的函数,使用了类似的查询(如预期的那样更好)。

这是该代码的一部分-

        $query  = $db->getQuery(true);
        $query->select($recursive ? 'b.id' : 'a.id');
        $query->from('#__user_usergroup_map AS map');
        $query->where('map.user_id = '.(int) $userId);
        $query->leftJoin('#__usergroups AS a ON a.id = map.group_id');

        // If we want the rules cascading up to the global asset node we need a self-join.
        if ($recursive) {
                $query->leftJoin('#__usergroups AS b ON b.lft <= a.lft AND b.rgt >= a.rgt');
        }

        // Execute the query and load the rules from the result.
        $db->setQuery($query);
        $result = $db->loadResultArray();

唯一的区别在于获取表信息的方式。

我现在可以简单地使用它作为-

jimport( 'joomla.access.access' );
$groups = JAccess::getGroupsByUser(526, False); //526 is the user_id for user b
print_r($groups);

这做了我想要的-

Array ( [0] => 2 [1] => 11 )

谢谢谷歌。

于 2013-06-11T19:06:37.143 回答