私は codeigniter アプリケーションに Ion Auth を使用していますが、1 つのことを除いてすべて問題ないようです。
ユーザーのリストとそのユーザーのグループを表示する必要があります。独自のモデルを作成してクエリを実行せずに、特定のユーザーのグループ ID を取得するにはどうすればよいですか。
$this->ion_auth->user($id)->row();
グループ ID を取得しません。
私は codeigniter アプリケーションに Ion Auth を使用していますが、1 つのことを除いてすべて問題ないようです。
ユーザーのリストとそのユーザーのグループを表示する必要があります。独自のモデルを作成してクエリを実行せずに、特定のユーザーのグループ ID を取得するにはどうすればよいですか。
$this->ion_auth->user($id)->row();
グループ ID を取得しません。
Ion Auth は、最新バージョンのget_user関数を更新して削除しました。この結果、以下はログインしているユーザーの現在のグループ ID を返す必要があります。
$this->ion_auth->get_users_groups()->row()->id
特定のユーザーのグループ ID を取得したい場合は、ユーザー ID をget_users_groupsメソッドに渡すことができます。
オブジェクトを取得します。
$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をセッションに追加したかったので、これに遭遇しました。誰かが興味を持っている場合のために、これが私がそれをした方法です(私がすべてがどこで行われていたかを理解することができたら)。
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()ステートメントのリストに追加します。
コアをそのままにしておくためにライブラリ/モデルを拡張する必要があったと思いますが、私が行ったことを簡単に実行できます。
これが誰かに役立つことを願っています。
ロブ
これを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?>