带CodeIgniter的用户权限系统



我正在使用CodeIgniter重新开发我的系统,我是新的,我正在尝试从我的控制器加载一个函数,该函数将检查用户是否有权查看/访问该功能。

我在我的DB中使用TEXT,它具有每个用户级别所拥有的所有权限,然后将权限保存到我的Controller中的会话var中。

在我的控制器Users.php:中

public function UserHasPermissions($permission){
checkSession($this);
$arrayPermissions = explode($this->sessions->userdata('session_permissions'));
if(in_array($permission, $arrayPermissions)){
return true;
} else {
return false;
}
}

在我的视图home.php中,我正在进行以下尝试:

$this->load->view('commons/header');
if($this->Users->UserHasPermissions('ADD_MEETING')){
echo 'content';
}
$this->load->view('commons/footer');

它返回这个错误:

An uncaught Exception was encountered
Type: Error
Message: Call to a member function UserHasPermissions() on null
Filename: /var/www/html/DF_CHECKER_CI/application/views/home.php
Line Number: 4

我看了一下这些文件,但没有什么能真正帮助我。

https://www.codeigniter.com/user_guide/general/views.html#adding-动态数据到视图

如何从视图调用代码点火器控制器功能

如果试图从视图中调用控制器,则应在呈现视图之前,在呈现视图的方法或类构造函数中,确定用户在控制器中拥有哪些权限,从而破坏MVC。话虽如此,除非引用singleton CI实例,否则不能从CI中的视图调用控制器:

$ci = &get_instance();
$this->load->view('commons/header');
if($ci->UserHasPermissions('ADD_MEETING')){
echo 'content';
}
$this->load->view('commons/footer')

然而,这将产生一个错误:

类的

对象用户无法转换为字符串

这里有一种方法:

class Users extends CI_Controller{ //or whatever you're doing here
public function __construct()
{
// you can check all permissions here if you'd like
}
/**or**/
/**whatever is responsible for calling your view**/
public function index()
{
$data['has_permission'] = $this->userHasPermissions('ADD_MEETING');
$this->load->view('home',$data); 
}
private function userHasPermissions($permission)
{
return in_array($permission, $this->sessions>userdata('session_permissions'));
}
}

在你看来:

<?if($has_permission):?> 
<--show content-->
<?endif;?>
  1. 除非使用smarty这样的模板引擎,否则不应该在视图中加载视图
  2. 你不能像访问库/模型方法那样访问控制器方法(我认为如果你使用HMVC,你可能可以访问,但显然不是(

您可以创建模型、辅助对象或库。尽管模型/助手更适合。这是相对容易的,尤其是如果您以前以任何身份使用过CI,就像现在这样。

唯一需要注意的是,如果您使用助手,则必须像函数$CI = &get_instance();中那样访问CI实例,然后才能像$CI->load->database(); $CI->db->get('users')->result();或其他任何东西一样使用它。

最新更新