首页 > 解决方案 > 如何在具有 3 个用户角色的 codeigniter 上进行良好的多级登录

问题描述

我将使用 3 个用户角色登录并将访问权限仅限于特定页面,但每当我尝试手动输入地址时,我可以在应该限制特定用户访问页面时访问该页面

我正在尝试遵循互联网上的一些代码,但此代码仅适用于登录,但不能限制特定用户登录时的直接访问

这是控制器Login.php

<?php
class Login extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        $this->load->model('login_model');
    }

    function index()
    {
        $this->load->view('login');
    }

    function auth()
    {
        $username = htmlspecialchars($this->input->post('username', TRUE), ENT_QUOTES);
        $password = htmlspecialchars($this->input->post('password', TRUE), ENT_QUOTES);

        $cek_us_guru = $this->login_model->auth_guru($username, $password);

        if ($cek_us_guru->num_rows() > 0) { //jika login sebagai wali kelas
            $data = $cek_us_guru->row_array();
            $this->session->set_userdata('masuk', TRUE);
            if ($data['level'] == '1') { //id_role admin
                $this->session->set_userdata('id_role', '1');
                $this->session->set_userdata('ses_id', $data['email']);
                redirect('page');
            } else { //id_role dosen
                $this->session->set_userdata('id_role', '2');
                $this->session->set_userdata('ses_id', $data['email']);
                redirect('page');
            }
        } else { //jika login sebagai mahasiswa
            $cek_us_orang_tua = $this->login_model->auth_orangtua($username, $password);
            if ($cek_us_orang_tua->num_rows() > 0) {
                $data = $cek_us_orang_tua->row_array();
                $this->session->set_userdata('masuk', TRUE);
                $this->session->set_userdata('id_role', '3');
                $this->session->set_userdata('ses_id', $data['email']);
                redirect('page');
            } else {  // jika username dan password tidak ditemukan atau salah
                $url = base_url();
                echo $this->session->set_flashdata('msg', 'Username Atau Password Salah');
                redirect($url);
            }
        }
    }

    function logout()
    {
        $this->session->sess_destroy();
        $url = base_url('');
        redirect($url);
    }
}

这是控制器Page.php

<?php
class Page extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        //validasi jika user belum login
        if ($this->session->userdata('masuk') != TRUE) {
            $url = base_url();
            redirect($url);
        }
    }

    function index()
    {
        $data['_view'] = 'dashboard';
        $this->load->view('layouts/main', $data);
    }

    function data_guru_absensi_add()
    {

        if ($this->session->userdata('id_role') == '1' || $this->session->userdata('id_role') == '2') {
            $data['_view'] = 'absensi/add';
            $this->load->view('layouts/main', $data);
        } else {
            echo "Anda tidak berhak mengakses halaman ini";
        }
    }
function data_orang_tua_edit()
    {

        if ($this->session->userdata('id_role') == '1' || $this->session->userdata('id_role') == '3') {
            $data['_view'] = 'orang_tua/edit';
            $this->load->view('layouts/main', $data);
        } else {
            echo "Anda tidak berhak mengakses halaman ini";
        }
    }
    function data_orang_tua_index()
    {

        if ($this->session->userdata('id_role') == '1' || $this->session->userdata('id_role') == '3') {
            $data['_view'] = 'orang_tua/index';
            $this->load->view('layouts/main', $data);
        } else {
            echo "Anda tidak berhak mengakses halaman ini";
        }
    }

这是模型Login_model.php

<?php
class Login_model extends CI_Model
{
    //cek email dan password guru
    function auth_guru($username, $password)
    {
        $query = $this->db->query("SELECT * FROM guru WHERE email_gr='$username' AND pass=MD5('$password') LIMIT 1");
        return $query;
    }

    //cek email dan password orang tua
    function auth_orangtua($username, $password)
    {
        $query = $this->db->query("SELECT * FROM orang_tua WHERE email_ot='$username' AND pass=MD5('$password') LIMIT 1");
        return $query;
    }
}

我想为每个用户拥有正确的访问权限,这样如果他们不是正确的用户,他们就无法访问另一个页面

标签: phpmysqlcodeigniter

解决方案


您可以在 page.php index() 函数中尝试此操作,而不是 function __construct()

function index()
    {            
       if($this->session->userdata('id_role') ==1){ 
         $data['_view'] = 'dashboard';
         $this->load->view('layouts/main', $data);
       }else{
         redirect("login");
       }
    }

推荐阅读