【发布时间】:2012-05-30 20:48:18
【问题描述】:
我正在为我的 codeigniter 应用程序使用 Ion Auth,除了一件事之外,一切似乎都很好。
我需要显示用户列表以及他们所在的组。如何在不创建自己的模型和查询的情况下检索特定用户的组 ID。
$this->ion_auth->user($id)->row(); 不检索组 ID。
【问题讨论】:
标签: php codeigniter codeigniter-2 ion-auth
我正在为我的 codeigniter 应用程序使用 Ion Auth,除了一件事之外,一切似乎都很好。
我需要显示用户列表以及他们所在的组。如何在不创建自己的模型和查询的情况下检索特定用户的组 ID。
$this->ion_auth->user($id)->row(); 不检索组 ID。
【问题讨论】:
标签: php codeigniter codeigniter-2 ion-auth
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 方法。
尝试将其添加到 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']);
}
【讨论】:
在控制器中使用:
$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->data['this_user_groups'] = $this->ion_auth->get_users_groups()->result();
并仅查看:
<?php foreach ($this_user_groups as $group):?>
<?php echo $group->description;?>,
<?php endforeach?>
【讨论】:
获取对象:
$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()
您可以查看有关获取用户组的官方文档:
【讨论】:
我遇到这个是因为我想在成功登录后将用户的 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() 语句的列表。
我知道我可能应该只是扩展库/模型以保持核心不变,但你可以接受我所做的并轻松地做到这一点。
希望这对某人有所帮助。
罗伯
【讨论】: