php - 如何在具有 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;
}
}
我想为每个用户拥有正确的访问权限,这样如果他们不是正确的用户,他们就无法访问另一个页面
解决方案
您可以在 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");
}
}
推荐阅读
- javascript - 当从网页进行 jQuery ajax 调用时调用内容脚本中的函数
- javascript - 展开网页上的所有可折叠部分
- javascript - 我在Promise的then()方法中执行Promsie.all(),Promsie.all()中的方法先执行。代码如下
- php - PHP - Laravel 检查全球首次登录
- google-apps-script - 使用 API 以编程方式创建 Google App 脚本
- ios - 使用 ARKit 中的相机移动 3D 对象(箭头)
- cocoa - 快速同步滚动 NSTableView 与 NSOutlineView - 来自 NSScrollView 的实时滚动通知
- python - 有没有更快的方法来使用 python 从 CSV 中分离重复和不同的数据?
- java - 无法在 aws ec2 实例上安装 Java
- xaml - 如何在两个并排的标签上设置 TextColor 和 HorizontalOptions?