Php 允许具有特定信誉的视图
我只是想寻找一些方法来阻止那些无权查看特定页面的用户。我尝试在codeigniter core文件夹中的后端控制器内组合一个函数,并让所有后端控制器对其进行扩展。我想把这个函数放在它们的内部,以符合将这个函数放在每个控制器内部的枯燥原则 我在寻找一种写函数的不同方法,或者只是对函数应该做什么有不同的想法Php 允许具有特定信誉的视图,php,codeigniter,Php,Codeigniter,我只是想寻找一些方法来阻止那些无权查看特定页面的用户。我尝试在codeigniter core文件夹中的后端控制器内组合一个函数,并让所有后端控制器对其进行扩展。我想把这个函数放在它们的内部,以符合将这个函数放在每个控制器内部的枯燥原则 我在寻找一种写函数的不同方法,或者只是对函数应该做什么有不同的想法 public function view_allowed($user_data) { if ($user_data->role_id != 4) { ret
public function view_allowed($user_data)
{
if ($user_data->role_id != 4)
{
return false;
}
return true;
}
有了这个,我只需在其他控制器的construct中调用函数,并执行和if语句,如果它返回false,则直接转到其他页面,该页面将表示它们没有正确的信誉来查看该页面
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Recent_activities extends Backend_Controller
{
/**
* Load the parent construct and any additional models, helper, libraries available.
* @return void
*/
public function __construct()
{
parent::__construct();
$view_allowed = view_allowed($user_data);
}
public function index()
{
$this->breadcrumb->add_crumb('<li><a href="' . site_url() .
'control-panel/activities/recent-activities">Activities</a></li>');
$this->breadcrumb->add_crumb('Recent Activites');
$activities = $this->user->get_all();
$this->template
->title('Recent Activites')
->build('recent_activities_view');
}
}
有什么问题、意见、顾虑吗
编辑2:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Recent_activities extends Backend_Controller
{
/**
* Load the parent construct and any additional models, helper, libraries available.
* @return void
*/
public function __construct()
{
parent::__construct();
$view_allowed = view_allowed($user_data);
if(!$view_allowed)
{
redirect('go/to/a/new/page');
}
}
public function index()
{
$this->breadcrumb->add_crumb('<li><a href="' . site_url() .
'control-panel/activities/recent-activities">Activities</a></li>');
$this->breadcrumb->add_crumb('Recent Activites');
$activities = $this->user->get_all();
$this->template
->title('Recent Activites')
->build('recent_activities_view');
}
}
我不得不做一个编辑,因为我正在考虑这将做什么。我想做的就是在每个控制器结构上运行函数,普通用户不能查看,只有管理员可以查看。因此,如果我执行以下操作,如果用户无法查看其他页面,它将如何知道重定向到其他页面
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Recent_activities extends Backend_Controller
{
/**
* Load the parent construct and any additional models, helper, libraries available.
* @return void
*/
public function __construct()
{
parent::__construct();
$view_allowed = view_allowed($user_data);
}
public function index()
{
$this->breadcrumb->add_crumb('<li><a href="' . site_url() .
'control-panel/activities/recent-activities">Activities</a></li>');
$this->breadcrumb->add_crumb('Recent Activites');
$activities = $this->user->get_all();
$this->template
->title('Recent Activites')
->build('recent_activities_view');
}
}
如果$user\u data
是您的模型,您可以为该模型创建一个函数,如hasAccess
,并从控制器调用它我将为此创建一个帮助器函数:
if(!function_exists('view_allowed'))
{
function view_allowed($user_data=null)
{
if($user_data->role_id != 4)
{
return false;
}
else
{
return true;
}
}
}
下面是一篇关于如何设置助手函数的好文章
在控制器中
$this->load->helper('new_helper');
//pass in $user_data
//will return true or false
$view_allowed = view_allowed($user_data);
为您的编辑更新2:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Recent_activities extends Backend_Controller
{
/**
* Load the parent construct and any additional models, helper, libraries available.
* @return void
*/
public function __construct()
{
parent::__construct();
$view_allowed = view_allowed($user_data);
if(!$view_allowed)
{
redirect('go/to/a/new/page');
}
}
public function index()
{
$this->breadcrumb->add_crumb('<li><a href="' . site_url() .
'control-panel/activities/recent-activities">Activities</a></li>');
$this->breadcrumb->add_crumb('Recent Activites');
$activities = $this->user->get_all();
$this->template
->title('Recent Activites')
->build('recent_activities_view');
}
}
我用a来表示这样的事情
/* Location: ./application/config/hooks.php */
$hook['post_controller_constructor'] = array(
'class' => 'security',
'function' => 'checkLogin',
'filename' => 'security.php',
'filepath' => 'hooks/security'
);
然后是安全:
class Security{
var $CI;
var $class;
public function __construct() {
$this->CI =& get_instance();
$this->class = $this->CI->router->fetch_class();
//check permission
}
}
每次调用控制器构造函数后,它都会调用,我认为它是干的
希望它能帮助别人。您是否试图在全球范围内为整个网站这样做?或者只是一个特定的页面?是的,我的整个网站都是全局的。这让我很困惑$用户_数据是用户登录后创建的对象。太好了。我还会在controller construct方法中调用它吗?这是一个很好的答案,我将使用它,但只是将它与一些auth库和what not use privileges进行比较。您可以使用auth库,例如在您的示例中,由于您正在检查一些非常简单的内容,因此使用帮助程序可能更容易。我编辑了我的帖子,再次感谢您在这个主题上提供的帮助。我也想问一下,如果我需要这个项目,你是否建议我找一个我自己的图书馆,或者只是一个普通的助手就足够了。太好了。我还可以做些什么,这样我就不必在这么多不同的领域编写代码了。