2011-04-05 73 views
6

在CodeIgniter中实现ACL的最佳方式是什么?CodeIgniter - ACL的最佳实现

  • 基于数据库的角色,组,用户执行?
  • 创建图书馆?

下面是我们正在使用:

文,作者

有两种类型作者:

  • 普通作者(只能看到他自己的文章)。
  • 作者也是管理员(可以查看所有文章并批准其他作者的文章)。

考虑到功能会扩展(更多需要对作者类型进行权限限制的功能),在CodeIgniter中执行ACL的最佳方法是什么?

+0

您可以查看[THIS](http://codeigniter.com/forums/viewthread/115032/)和[THIS](http://codeigniter.com/forums/viewthread/129027/)页面,并尝试用“ACL”搜索[这里](http://codeigniter.com/forums/)。 – enam 2011-04-05 18:34:23

+1

您可以阅读下面的URL,它描述了如何将Zend ACL库添加到CodeIgniter安装中:[adding-zend-acl-to-codeigniter](http://www.lucdebrouwer.nl/adding-zend-acl- to-codeigniter) – appleboy 2011-10-18 01:58:17

回答

2

您需要为每种类型的权限分开控制器,并拥有一个模块,用于在用户使用该特定控制器所允许的权限类型登录时检查会话变量集。

// module User_model: 
function is_logged_in_admin() 
{ 
    $is_logged_in = $this->session->userdata('is_logged_in'); 
    $user_status = $this->session->userdata('user_type'); 
    if(!isset($is_logged_in) || $is_logged_in != true || $user_status != 'admin') 
    { 
    $this->session->sess_destroy(); 
    redirect('please_login/', 'refresh');   

    }  
} 

控制器,加载模块和在构建体中检查:

function __construct() 
{ 
    parent::__construct(); 
    $this->load->model('User_model'); 
     $this->User_model-> is_logged_in_admin(); 

} 
+2

这只是用于登录,而不是控制器特定组件的ACL。 – Hopstream 2011-04-05 20:40:28

+0

您还可以包含is_logged_in_admin();在控制器内的每个特定功能中。 – tylerpenney 2011-04-07 02:00:35

0

我在写一个ACL基于授权系统,其上的URL级别检查权限的过程。它应该是透明的并且认证系统是不可知的。它被实现为一个后控制器构造函数钩子。

可悲的是它没有完成。但你可以看看on github,如果你想完成它,请将其分叉。 atm只适用于在配置文件中编码的ACL,但它允许外部组/角色来源(我还没有写出一个)。