2012-01-30 42 views
1

我正在學習cakephp的ACL功能。我已經去了cakephp文檔。爲了學習更多,我已經檢查了一些ACL插件的代碼/ db,比如croogo和alaxos ACL插件。我可以看到,在aros_acos表中,有像_create,_read,_update和_delete這樣的列。從這些示例(croogo/alaxos)中,對於一個動作,例如: - add(在用戶控制器下),我可以在_create,_read,_update和_delete列中看到值爲1 1 1 1。由於名稱表示add只能映射到_create(1 0 0 0),對嗎?另外,在這種情況下我們需要4列嗎?Cakephp ACL操作模式與CRUD模式

我與CRUD模式的動作模式混淆。在我的應用程序中,除了CRUD之外,還有一些功能如批准,拒絕等。我是否需要爲這些操作添加列?或者mapactions將適用於此(在這種情況下,我是否需要映射控制器中的所有操作)?另外,在我的應用程序中,我需要給所有者編輯和所有者刪除權限。如何以更好的方式用CakePHp ACL完成所有這些操作?

回答

5

這取決於你想要用Acl做什麼。你在Croogo或Alaxos Acl插件(順便說一下,我的插件)中看到的是使用Acl來允許/拒絕訪問某些操作。 這是通過一起使用AuthComponent和AclComponent實現的。如果這樣做,如果你看一下蛋糕的代碼,權限檢查在DbAcl類完成在下面的方法:

function check($aro, $aco, $action = "*") 

這需要潛在的三個參數。

這個函數的調用由ActionsAuthorize類的authorize()功能在下面這行:

return $Acl->check($user, $this->action($request)); 

這顯然是沒有第三個參數的調用。

所以基本上這是什麼第三個說法?這是照顧aros_acos數據表的_xxx字段的方式。因此,這意味着Auth + Acl組件不會使用這些_xxx字段來檢查權限。 實際上,它們被使用但不同:當不使用第三個參數時,所有設置爲1的字段表示允許,如果一個或多個字段設置爲-1,則表示拒絕。 個人爲Alaxos Acl插件,我選擇將所有這些字段設置爲-1拒絕,只是爲了更清楚。

關於你的應用程序,如果它的「功能」被映射到行動,你很可能只是忘記了這些_xxx領域和使用核心驗證+ ACL機制。

關於您的最後一個問題(所有者編輯和刪除),這是Cake ACL的常見問題。 答案是大多數情況下比較Object.user_id和記錄的用戶標識來決定用戶是否可以編輯/刪除記錄。 Cake ACL不支持開箱即用的記錄所有者。