在codeigniter中,我有限制控制器的功能,
private function controllerAccess(){
$sessionArray = $this->session->userdata('logged_in');
if($sessionArray['type'] == 'ADMIN' || $sessionArray['type'] == 'SUPERVISOR'){
return true;
}
else{
return false;
}
}
我通过这样做阻止了我的索引控制器,
public function index(){
$system = new SYSTEM();
$this->controllerAccess() ? $this->dashboard() : $system->container('No Access');
}
问题是,我是否需要对每个公共方法(控制器)做同样的事情? 因为,通过这样做:我可以访问子控制器。例如,我无法访问代理的索引页面。但我可以访问:代理/仪表板,代理/验证等...
有没有办法阻止整个控制器? 感谢。
答案 0 :(得分:0)
我不知道你的意思是什么,我已经使用CI 2年了。它可能是我但是..你可能想要使用一个authenticx库,因为你在控制器中请求用户数据,这在我看来并不好。
你应该像
$user = $this->authex->getSession();
要检查用户是否适合查看您只使用此功能的页面
private function verifyUser() {
$user = $this->authex->getSession();
if ($user == null)
redirect('hub/notauthorized/', 'refresh');
}
然后在每个要检查用户权限的公共函数中调用它
$this->verifyUser();
答案 1 :(得分:0)
只需在控制器的构造函数中运行该函数,然后每次控制器命中时该函数都会运行
class YourController extends CI_Controller {
public function __construct()
{
parent::__construct();
if(!$this->controllerAccess(){
//you got a false so redirect or whatever you want to do on negative
}
}
private function controllerAccess(){
$sessionArray = $this->session->userdata('logged_in');
if($sessionArray['type'] == 'ADMIN' || $sessionArray['type'] == 'SUPERVISOR'){
return true;
}
else{
return false;
}
}
public function index(){
$system = new SYSTEM();
$this->controllerAccess() ? $this->dashboard() : $system->container('No Access');
}
}