首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于CodeIgniter的用户权限系统

基于CodeIgniter的用户权限系统
EN

Stack Overflow用户
提问于 2018-08-02 18:36:08
回答 2查看 3.9K关注 0票数 0

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

我在我的DB中使用一个TEXT,其中包含每个用户级别所拥有的所有权限,然后将这些权限保存到我的Controller中使用的会话var中。

在我的控制器Users.php

代码语言:javascript
复制
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 )中,我正在做以下尝试:

代码语言:javascript
复制
$this->load->view('commons/header');
if($this->Users->UserHasPermissions('ADD_MEETING')){
    echo 'content';
}
$this->load->view('commons/footer');

它会返回这个错误:

代码语言:javascript
复制
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

我看了一下这些文档,但没有什么对我有太大帮助。

guide/general/views.html#adding-dynamic-data-to-the-view

How to call codeigniter controller function from view

EN

回答 2

Stack Overflow用户

发布于 2018-08-02 19:10:07

通过尝试从视图中调用控制器来打破MVC,您应该在呈现视图的方法或类构造函数中呈现视图之前,确定用户在控制器中拥有哪些权限。尽管如此,除非引用单个CI实例,否则不能从CI中的视图调用控制器:

代码语言:javascript
复制
$ci = &get_instance();

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

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

无法将类用户的对象转换为字符串。

有一种方法:

代码语言:javascript
复制
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'));
   }
}

在你看来:

代码语言:javascript
复制
<?if($has_permission):?> 
<--show content-->
<?endif;?>
票数 1
EN

Stack Overflow用户

发布于 2018-08-03 02:31:04

  1. 您不应该在视图中加载视图,除非您正在使用像smarty这样的模板引擎
  2. 您不能像访问库/模型方法那样访问控制器方法(我认为如果您正在使用HMVC,您可以访问控制器方法,但显然不是)

您可以创建模型、助手或库。虽然一个模型/助手会更适合。这是相对容易的,特别是如果您以前在任何身份中使用过CI,就像它显示的那样。

唯一要注意的是,如果您使用一个助手,您必须像在一个函数中那样访问CI实例:$CI = &get_instance();,然后您可以像$CI->load->database(); $CI->db->get('users')->result();或其他什么一样使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51660193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档