Получить идентификатор группы пользователя в Ion Auth - Codeigniter

Я использую Ion Auth для своего приложения codeigniter, и все кажется хорошим, за исключением одного.

Мне нужно отобразить список пользователей вместе с группами, в которых они находятся. Как я могу получить идентификатор группы определенного пользователя, не создавая свои собственные модели и не запрашивая их.

$this->ion_auth->user($id)->row(); не получает идентификатор группы.


person WebNovice    schedule 24.05.2012    source источник


Ответы (5)


Ion Auth обновил и удалил функцию get_user в последней версии. В результате нижеприведенный код должен вернуть текущий идентификатор группы вошедшего в систему пользователя:

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

Если вы хотите получить идентификатор группы определенного пользователя, вы можете передать идентификатор пользователя в метод get_users_groups.

person MY_Mark    schedule 24.05.2012
comment
Undefined method Ion_auth::get_users_group() called' Нет метода get_users_group в моем Ion Auth. - person WebNovice; 24.05.2012
comment
Вы пробовали get_users_group или get_users_groups (обратите внимание на множественное число «s» в группах)? - person MY_Mark; 24.05.2012
comment
К вашему сведению, пользователь может принадлежать к нескольким группам, отсюда и название get_users_groupS, поэтому ваш ответ в этом случае будет неверным. - person Sparky; 31.03.2015

получить объект:

$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

person Alberto Fortes    schedule 03.07.2012
comment
К вашему сведению, пользователь может принадлежать к нескольким группам, отсюда и название get_users_groupS, поэтому ваш ответ в этом случае будет неверным. - person Sparky; 31.03.2015

Я столкнулся с этим, потому что хотел добавить идентификатор группы пользователя в сеанс после успешного входа в систему. Если кому интересно, вот как я это сделал (однажды мне удалось выяснить, где все делается).

В 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().

Я знаю, что мне, вероятно, следовало бы просто расширить библиотеки/модели, чтобы сохранить ядро ​​нетронутым, но вы могли бы взять то, что я сделал, и легко сделать это.

надеюсь, это поможет кому-то.

Роб

person rob s    schedule 06.03.2013
comment
хотел добавить: спасибо @albertofortes за оригинальный самородок добра :-) - person rob s; 06.03.2013

Попробуйте добавить это в 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']);
}
person Alex    schedule 08.06.2012

использовать в контроллере:

$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?>
person almix    schedule 13.06.2012