我有5个用户类型并且有权限表,其中我给不同的用户不同的权限。像is_view,is_delete,is_add等权限。用户根据这些权限访问该功能。
我完成了数据库。我想在调用控制器之前检查每个页面上给用户的权限。
答案 0 :(得分:1)
您应该将您的auth-logic放在控制器的构造函数中
OR
在基本控制器的构造函数中(更多DRY,因为您不必在所有控制器中重复逻辑)。
答案 1 :(得分:1)
我会创建一个扩展核心控制器的新控制器。将此文件放在application/core/
class MY_AuthController extends CI_Controller {
public function __construct() {
// Do your auth check in here, redirect if not logged in
}
}
然后,所有需要身份验证的页面都会继承这个新控制器。您只需将此文件放在常规控制器文件夹
中class Admin extends MY_AuthController {
// All your controller goodness in here..
}
答案 2 :(得分:0)
我建议你阅读以下两篇文章:
Phil将向您介绍如何创建其构造函数将包含会话和可能的数据库逻辑的父控制器。之后创建的所有控制器都应该从您的自定义控制器而不是本机CI_Controller
继承。
跟着......
Shane的文章改进了Phil的技术并将您的自定义控制器从/core
重新定位到/base
,并且还使用了更好的__autoload()
呃。例如,这个实现允许我使用CodeIgniter的CLI类,而Phil's窃听。
为了给你一个想法 - 一旦完成,你的代码看起来会像这样:
/base/MY_In_Controller.php
:<?php
class MY_In_Controller extends CI_Controller{
function __construct(){
parent::__construct();
//things like:
//is the user even logged in? thank heavens I don't have to check this in every controller now. redirect if the session doesnt exist.
//query the database and grab the permissions for the user. persist them with $this->load->vars();
$this->data['perms'] = some_database_function();
$this->load->vars($this->data);
}
}
controllers/manage.php
:<?php
class Manage extends MY_In_Controller{
function __construct(){
parent::__construct();
}
function index(){
$this->load->view('manage');
//and I can still access their permissions here and in the view.
print_r($this->data['perms']);
}
}