Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 允许具有特定信誉的视图_Php_Codeigniter - Fatal编程技术网

Php 允许具有特定信誉的视图

Php 允许具有特定信誉的视图,php,codeigniter,Php,Codeigniter,我只是想寻找一些方法来阻止那些无权查看特定页面的用户。我尝试在codeigniter core文件夹中的后端控制器内组合一个函数,并让所有后端控制器对其进行扩展。我想把这个函数放在它们的内部,以符合将这个函数放在每个控制器内部的枯燥原则 我在寻找一种写函数的不同方法,或者只是对函数应该做什么有不同的想法 public function view_allowed($user_data) { if ($user_data->role_id != 4) { ret

我只是想寻找一些方法来阻止那些无权查看特定页面的用户。我尝试在codeigniter core文件夹中的后端控制器内组合一个函数,并让所有后端控制器对其进行扩展。我想把这个函数放在它们的内部,以符合将这个函数放在每个控制器内部的枯燥原则

我在寻找一种写函数的不同方法,或者只是对函数应该做什么有不同的想法

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库,例如在您的示例中,由于您正在检查一些非常简单的内容,因此使用帮助程序可能更容易。我编辑了我的帖子,再次感谢您在这个主题上提供的帮助。我也想问一下,如果我需要这个项目,你是否建议我找一个我自己的图书馆,或者只是一个普通的助手就足够了。太好了。我还可以做些什么,这样我就不必在这么多不同的领域编写代码了。