我正在使用新的CodeIgniter重新开发我的系统,我正在尝试从我的Controller加载一个函数,该函数将检查用户是否拥有查看/访问该功能的权限。
我在我的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;
}
}在“我的视图”( my 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我看了一下这些文档,但没有什么对我有太大帮助。
发布于 2018-08-02 19:10:07
通过尝试从视图中调用控制器来打破MVC,您应该在呈现视图的方法或类构造函数中呈现视图之前,确定用户在控制器中拥有哪些权限。尽管如此,除非引用单个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;?>发布于 2018-08-03 02:31:04
您可以创建模型、助手或库。虽然一个模型/助手会更适合。这是相对容易的,特别是如果您以前在任何身份中使用过CI,就像它显示的那样。
唯一要注意的是,如果您使用一个助手,您必须像在一个函数中那样访问CI实例:$CI = &get_instance();,然后您可以像$CI->load->database(); $CI->db->get('users')->result();或其他什么一样使用它。
https://stackoverflow.com/questions/51660193
复制相似问题