Как загрузить в codeigniter только профиль пользователя

Я новичок в codeigniter. У меня есть система, в которой у меня есть три пользователя: суперадмин, администратор и просто пользователь. Суперадмин может создавать администраторов, а администратор может создавать пользователей и просматривать их, но не может видеть других администраторов, созданных суперадмином. Теперь я хочу, чтобы пользователи просматривали только свой профиль, а не всех пользователей в базе данных. Как я могу этого добиться?

Контроллер:

 public function index ()
{
    // Fetch all users
    $this->data['users'] = $this->client_m->get();


    // Load view
    $this->data['subview'] = 'client/user/index';
    $this->load->view('client/_layout_main', $this->data);
}

// функция get возвращает всех пользователей в базе данных, но мне нужен только текущий пользователь

Модель:

 public function login ()
{
    $user = $this->get_by(array(
        'email' => $this->input->post('email'),
        'password' => $this->hash($this->input->post('password')),

    ), TRUE);

    if (count($user)) {
        // Log in user
        $data = array(

            'email' => $user->email,


            'id' => $user->id,

            'loggedin' => TRUE,
        );
        $this->session->set_userdata($data);
    }
}

Вид:

<div class="jumbotron">
        <section>
        <table class="table table-hover">
        <thead>
        <tr class="success">
        <th>Name</th>
        <th>Email</th>
        <th>Balance</th>
        <th>Edit</th>
        <th>Delete</th>
        </tr>
        </thead>
        <tbody>
        <?php if(count($users)): foreach($users as $user): ?>   
        <tr class="info">
        <td><?php echo anchor('client/user/edit/' . $user->id, $user->name); ?></td>
        <td><?php echo anchor('client/user/edit/' . $user->id, $user->email); ?></td>
        <td><?php echo anchor('client/user/edit/' . $user->id, $user->balance); ?></td>
        <td><?php echo btn_edit('client/user/edit/' . $user->id); ?></td>
        <td><?php echo btn_delete('client/user/delete/' . $user->id); ?></td>
        </tr>
        <?php endforeach; ?>
        <?php else: ?>
        <tr>
        <td colspan="3">We could not find any users.</td>
        </tr>
        <?php endif; ?> 
        </tbody>
        </table>
        </section>
        </div>

В настоящее время я получаю всех пользователей, но я просто хочу показать пользователю только его профиль, а не данные о других пользователях.


person Rajan    schedule 25.07.2015    source источник
comment
поэтому передайте идентификатор пользователя в предложении where и выберите только одну запись для входа в систему   -  person shafiq.rst    schedule 25.07.2015
comment
@ user1048123 Передать идентификатор пользователя? где? я должен передать его в свой контроллер? и как получить его в моем файле просмотра?   -  person Rajan    schedule 25.07.2015
comment
При извлечении данных из базы данных добавьте предложение where с идентификатором пользователя, сведения о котором вы хотите просмотреть.   -  person Thyagi    schedule 25.07.2015


Ответы (2)


Вместо

$this->client_m->get();

сделать и использовать что-то вроде этого

$this->client_m->get_users_profile();

Поскольку вы сохраняете вошедшего в систему пользователя в сеансе, используйте это, а в get_users_profile () сделайте что-то вроде этого (конечно, используя свои собственные имена столбцов и таблиц):

$this->db->select('uid, name, balance, etc');
$query = $this->db->get_where('users_profiles', array('id' => $this->session->userdata('id')));
return $query->result();

Одно это сделает то, что вы хотите, но у вас должна быть логика в вашем контроллере, чтобы принимать решения на основе уровня разрешений. Поскольку вы используете сеансы, я бы предложил еще одну переменную сеанса, «роль», в которой вы можете хранить уровень разрешений пользователей. Затем в ваших контроллерах вы можете принимать решения на основе ролей. Например, если у вас есть контроллер администратора, который показывает страницу администратора, вы можете проверить роль вошедшего в систему пользователя, и если он не является администратором, вы можете перенаправить его. Это также может помочь вам в профилях, поскольку вы можете захотеть сочетать разные вещи, например, если вы администратор, вы можете видеть все профили, но если вы обычный пользователь, вы можете видеть только свой. Другими словами, вам нужен дополнительный уровень информации повсюду, чтобы принимать лучшие решения, поэтому вы также можете сохранить роль и использовать ее в сочетании с другими данными для принятия решений.

person greco.roamin    schedule 25.07.2015
comment
Спасибо! но могу я попросить еще немного помощи? есть ли какое-либо руководство о том, как назначить эти разрешения и добавить логику в базу данных в отношении текущего пользователя, вошедшего в систему? Я видел много Auth Library, но на самом деле не знаю, как ими пользоваться! - person Rajan; 26.07.2015
comment
Попробуйте использовать flexi auth. У них есть эти особенности. Это может сбивать с толку при первой попытке. Но это действительно помогает, когда вы попадаете в это. Проверьте их документацию haseydesign.com/flexi-auth/user_guide/installation или попробуйте их Codeigniter-3-RC2-with-Flexiauth из github.com/leap -it / Flexi-Auth-and-Codeigniter-3RC2. Это действительно экономит время, нужно только внести свой индивидуальный дизайн ... - person jones; 26.07.2015
comment
К сожалению, ваш вопрос слишком общий. Есть тысячи ответов. Тебе решать. Когда я говорю о сохранении уровня разрешений в переменной сеанса, я имею в виду добавить к сеансу что-то вроде: 'role' = ›0 (или что-то еще, что вам подходит). Даже используя flexi auth (или что-то еще), вам нужно будет понять, как изменять код, и узнать, как работает система. Если вы находитесь на уровне, который вам нужно научиться добавлять информацию в базу данных, вам, вероятно, сначала следует пройти базовые руководства по codeigniter. - person greco.roamin; 26.07.2015
comment
Спасибо, я просмотрю его документацию - person Rajan; 27.07.2015
comment
@ greco.roamin, поэтому для сеанса таблицы я должен добавить поле типа role = ›0 для администратора, 1 для чего-то еще. это так? потому что я просто скопировал, вставил код и получил ошибку, например: Таблица content.users_profiles не существует SELECT uid, name, balance, etc FROM (users_profiles) WHERE id = '2' - person Rajan; 27.07.2015
comment
@jones Привет! Покажите мне, пожалуйста, код для получения адреса электронной почты и баланса с именем пользователя из базы данных для текущего пользователя, вошедшего в систему. у меня есть настройка функции: общедоступная функция loggedin () {return (bool) $ this- ›session-› userdata ('loggedin'); } так что просто скажите мне, как поставить условие при выборке единственной записи для вошедшего в систему пользователя. - person Rajan; 27.07.2015

Когда вы используете гибкую аутентификацию, вы можете создавать привилегии из панели администратора для групп пользователей. Когда пользователь входит в систему, он будет авторизован со значениями сеанса, такими как имя, адрес электронной почты, группа и все свои привилегии. (Которая досталась ему от Группы). Затем вы можете использовать условие проверки привилегий flexi auth

if (! $this->flexi_auth->is_privileged('View Users'))
    {
        $this->session->set_flashdata('message', '<p class="error_msg">You do not have privileges to view user accounts.</p>');
        redirect('auth_admin');
    }
else{
     //User has the View Users privilege. Do this.. 
    }

Скачайте демо-файлы и проверьте ... Будет намного проще.

person jones    schedule 27.07.2015