2011-04-05 81 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,但它允許外部組/角色來源(我還沒有寫出一個)。