Административный доступ с Codeigniter

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

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

Что я хотел бы сделать, так это то, что если кто-то, кто входит в группу администраторов, может получить доступ к страницам администратора, но если пользователь принадлежит к другой группе и пытается войти в систему, он будет перенаправлен на главную страницу или куда угодно.

Я пытаюсь добавить аналогичный код в контроллеры страниц администратора.

class Dashboard extends MY_Controller {
public function __construct() {
    parent::__construct();

    // Access control
    if(!$this->session->userdata('logged_in')) {
        redirect('admin/login');
    }
}
}

Моя модель

class Authenticate_model extends CI_Model {
    public function login_user($username, $password){
        //Secure password
        $enc_password = md5($password);

        //Validate
        $this->db->where('username',$username);
        $this->db->where('password',$enc_password);

        $result = $this->db->get('users');

        if($result->num_rows() == 1){
            return $result->row();
        } else {
            return false;
        }
    }
} 

person PapT    schedule 13.01.2017    source источник


Ответы (2)


Вы можете сделать это самостоятельно, обеспечить проверку и установить переменную $SESSION для получения, если пользователь вошел в систему. Но это слишком много работы и подвержено ошибкам. Я рекомендую вам использовать эту популярную библиотеку: https://github.com/benedmunds/CodeIgniter-Ion-Auth. Его действительно легко настроить, вам просто нужно скопировать несколько файлов, и вы готовы к работе.

person N. Thanasis    schedule 13.01.2017

Если вы действительно хотите сделать это самостоятельно (вот в чем вопрос), вам нужно сохранить в SESSION две переменные - logged_in и is_admin.

Я бы рекомендовал создать две библиотеки с функцией:

function is_logged_in($admin = FALSE){
   $is_logged = $this->session->userdata('logged_in');
   if($admin){
       $is_logged = $this->session->userdata('is_admin')
   }
   return $is_logged;
}

Это предполагает, что вы храните два логических значения «logged_in» и «is_admin» в SESSION. (Если у пользователя есть group_id = 1, вы должны сохранить TRUE в is_admin)

Затем вы можете защитить страницы только для участников вашего сайта.

if(!$this->your_authenticatation_library->is_logged_in()){redirect('notMembersControler')}

и страница администратора:

if(!$this->your_authenticatation_library->is_logged_in(TRUE)){redirect('notMembersControler')}

Это основная идея, вам нужно работать в зависимости от того, что вы делаете. Надеюсь это поможет!

person Kārlis Janisels    schedule 14.01.2017