【问题标题】:Retrieve the group id of user in Ion Auth - Codeigniter在 Ion Auth - Codeigniter 中检索用户的组 ID
【发布时间】:2012-05-30 20:48:18
【问题描述】:

我正在为我的 codeigniter 应用程序使用 Ion Auth,除了一件事之外,一切似乎都很好。

我需要显示用户列表以及他们所在的组。如何在不创建自己的模型和查询的情况下检索特定用户的组 ID。

$this->ion_auth->user($id)->row(); 不检索组 ID。

【问题讨论】:

    标签: php codeigniter codeigniter-2 ion-auth


    【解决方案1】:

    Ion Auth 在最新版本中更新并删除了 get_user 功能。因此,下面应该返回登录用户的当前组 ID:

    $this->ion_auth->get_users_groups()->row()->id
    

    如果您想获取特定用户的组 id,可以将用户 id 传递给 get_users_groups 方法。

    【讨论】:

    • Undefined method Ion_auth::get_users_group() called' 我的 Ion Auth 中没有 get_users_group 方法。
    • 您尝试过 get_users_group 或 get_users_groups(注意组中的复数“s”)吗?
    • 仅供参考,一个用户可以属于多个组,因此名称为“get_users_groupS”,因此在这种情况下您的答案将失败。
    【解决方案2】:

    尝试将其添加到 ion_auth_model.php (或将查询放在其他地方)

    /**
     * get_all_users_with_group
     *
     * @return array
     **/
    public function get_all_users_with_group()
    {
        $this->trigger_events('get_all_users_with_groups');
    
        return $this->db->select(
            $this->tables['users'].'.*, '.
            $this->tables['users_groups'].'.'.$this->join['groups'].' as group_id, '.
            $this->tables['groups'].'.name as group_name, '.
            $this->tables['groups'].'.description as group_desc'
            )
        ->join($this->tables['users_groups'], $this->tables['users_groups'].'.'.$this->join['users'].'='.$this->tables['users'].'.id')
        ->join($this->tables['groups'], $this->tables['users_groups'].'.'.$this->join['groups'].'='.$this->tables['groups'].'.id')
        ->get($this->tables['users']);
    }
    

    【讨论】:

      【解决方案3】:

      在控制器中使用:

      $groups = array(1,2,3,4);
                  $this->data['list_staff'] = $this->ion_auth->users($groups)->result(); // выбираем всех teachers из зарегистрированных пользователей
                  foreach ($this->data['list_staff'] as $k => $one_staff)
                  {
                      $this->data['list_staff'][$k]->groups = $this->ion_auth->get_users_groups($one_staff->id)->result();
                  } 
      

      并在视图中使用:

      <?php foreach($list_staff as $one):?> 
          <?php foreach ($one->groups as $group):?>
                                          <?php echo $group->description;?>,
                                      <?php endforeach?> 
      <?endforeach;?> 
      

      但是如何查询以获取当前登录用户的组(例如在我的个人资料中)我找到了下一个决定。 控制器: $this-&gt;data['this_user_groups'] = $this-&gt;ion_auth-&gt;get_users_groups()-&gt;result(); 并仅查看:

      <?php foreach ($this_user_groups as $group):?>
                                      <?php echo $group->description;?>,
                                  <?php endforeach?>
      

      【讨论】:

        【解决方案4】:

        获取对象:

        $user_groups = $this->ion_auth->get_users_groups($user->id)->result();
        

        获取组名:

        $this->ion_auth->get_users_groups($data['id'])->row()->name;
        

        就我而言:

        $data['groups'] = $this->ion_auth->get_users_groups($data['id'])->row()
        

        您可以查看有关获取用户组的官方文档:

        http://benedmunds.com/ion_auth/#get_users_groups

        【讨论】:

        • 仅供参考,一个用户可以属于多个组,因此名称为“get_users_groupS”,因此在这种情况下您的答案将失败。
        【解决方案5】:

        我遇到这个是因为我想在成功登录后将用户的 group_id(s) 添加到会话中。万一有人感兴趣,这就是我的做法(一旦我设法弄清楚一切都在哪里完成)。

        在ion_auth_model.php中,我取了set_session函数:

            public function set_session($user)
        {
        
            $this->trigger_events('pre_set_session');
        
            $session_data = array(
                'identity'             => $user->{$this->identity_column},
                'username'             => $user->username,
                'email'                => $user->email,
                'user_id'              => $user->id, //everyone likes to overwrite id so we'll use user_id
                'old_last_login'       => $user->last_login
            );
        
            $this->session->set_userdata($session_data);
        
            $this->trigger_events('post_set_session');
        
            return TRUE;
        }
        

        并将其修改为:

            public function set_session($user)
        {
        
            $this->trigger_events('pre_set_session');
        
            $session_data = array(
                'identity'             => $user->{$this->identity_column},
                'username'             => $user->username,
                'email'                => $user->email,
                'user_id'              => $user->id, //everyone likes to overwrite id so we'll use user_id
                'old_last_login'       => $user->last_login
            );
        
            //get user group ids for user and pass to session
            $groups = $this->ion_auth->get_users_groups($user->id)->result();
        
            foreach ($groups as $row){
                $session_data['groups'][] = $row->id;
            }
        
            $this->session->set_userdata($session_data);
        
            $this->trigger_events('post_set_session');
        
            return TRUE;
        }
        

        现在它会向会话中写入一个名为 groups 的数组,该数组是用户所属的所有组的列表。

        我唯一要做的另一件事是修改 Ion_auth.php(在应用程序/库中)中的注销功能,以确保通过添加取消设置组会话变量

        $this->session->unset_userdata('groups');
        

        到其他 unset_userdata() 语句的列表。

        我知道我可能应该只是扩展库/模型以保持核心不变,但你可以接受我所做的并轻松地做到这一点。

        希望这对某人有所帮助。

        罗伯

        【讨论】:

        • 意在补充:感谢@albertofortes 的原始善良:-)
        猜你喜欢
        • 2016-01-23
        • 2013-02-11
        • 1970-01-01
        • 2013-01-14
        • 1970-01-01
        • 2018-05-26
        • 2011-10-12
        • 2016-07-16
        • 1970-01-01
        相关资源
        最近更新 更多