扩展控制器中的用户角色

时间:2014-02-01 06:13:52

标签: php codeigniter

我在这里尝试做的主要是在仪表板控制器中。到目前为止,我有使用Phil Sturgeon模板库的索引功能来构建仪表板作为主要内容视图。我在这里要考虑一些事情。我有管理员和基本用户能够看到仪表板。管理员将能够从仪表板内部看到基本用户可以看到的不同信息,如站点信息,待定注册等。

我是否应该为不同类型的用户提供单独的仪表板视图?

如果是这样,我如何从Admin_Controller访问user_data,以便我可以在仪表板的索引功能中执行if语句检查以查看它们是什么类型的用户?

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');
class Admin_Controller extends CI_Controller
{
    public $data = array();
    public function __construct()
    {
        parent::__construct();
        $this -> load -> model('user_model', 'user');
        $user_id = $this -> session -> userdata('user_id');
        $user_data = $this -> user -> get($user_id);
        $this -> data['user_data'] = $user_data;
        $this -> template -> set_theme('saturn') -> set_layout('default', 'admin') -> set_partial('navigation', 'admin/partials/navigation') -> set_partial('header', 'admin/partials/header');
    }
}

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');
class Dashboard extends Admin_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        $this -> template -> build('admin/dashboard', $this -> data);
    }
}

更新

我试图找出我可以从Admin_Controller访问$ user_data对象,以便我可以像这样运行if语句。

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');
class Dashboard extends Admin_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        if ($user_data -> role_id == 2)
        {
            $dashboard = 'admin_dashboard';
        }
        else
        {
            $dashboard = 'user_dashboard';
        }
        $this -> template -> build('admin/'.$dashboard, $this -> data);
    }
}

有什么想法吗?有没有人知道我如何将数据对象传递给仪表板控制器,以便它可以用于执行if语句?

2 个答案:

答案 0 :(得分:1)

  

我是否应该为不同类型的单独的仪表板视图   用户?

取决于仪表板结构。如果对于常规用户和管理员来说完全不同,那么为booth用户类型构建单独的仪表板可能会更好。如果存在一些常见元素,则可以在视图中使用if语句,以检查用户类型并使用righ仪表板部件。这更多是关于您的方便,而不是约定。

  

如果是这样,我如何从Admin_Controller访问user_data   我可以在索引函数中执行if语句检查   仪表板,看看他们是什么类型的用户?

您应该将user_data数组传递给视图,而不是从中读取会话数据。查看系统部件应始终直接从控制器获取所有数据,而不是从会话或任何其他应用程序组件获取所有数据。

答案 1 :(得分:0)

我可以给出一个建议,因为您将拥有一个必须始终存在的管理员帐户,认为它将是您的用户表的第一条记录(因为管理员和用户将是相同的表并且将具有不同的作用),所以id将为1,我想它应该是,所以在你的仪表板控制器中

public function index()
{
      if($this -> session -> userdata('user_id') == 1){
         $this -> template -> build('admin/dashboard', $this -> data);
      }else{
         //user dashboard.
      }

}

ELSE您可以通过您的角色定义它,例如admin具有Role Id = 1。

我希望它对你有所帮助。