2011-12-13 102 views
0

當CakePHP的深化發展應用我來到conclussion,有一個使用的前綴,比如管理員,當大量的冗餘數據,主持人等CakePHP的ACL沒有前綴的方法

當週圍的Googling了一下,我發現了一個答覆通過zuha-3 http://cakephp.1045679.n5.nabble.com/Going-back-to-school-ACL-td4941972.html#a4949876

在我們的應用程序中,我們保持前綴路由,但擺脫了方法路由。 所以我們還是得到了$this->params->params['prefix']但路由用戶 到index()方法而不是admin_index()方法。然後我們將 完全留給ACL來決定你的角色是否已經訪問 到索引函數。這使我們能夠擺脫50%的文件視圖和50%的控制器方法。

我們可以有在不同的用戶角色不同的看法,我們分配 視圖前綴用戶角色。因此,我們可以有一個管理視圖,所有 用戶管理員用戶角色將看到/Posts/View/Posts/admin/index.ctp的 代替 /Posts/View/Posts/index.ctp,當且僅當管理員視圖存在。我們 可以做同樣的事,管理者,使用者等,並把它留給 每個應用程序,以決定是否管理者會看到管理視圖或 經理視圖或客人視圖。

所以這將拿出大量的冗餘方法。

有沒有人有某種關於如何做到這一點的主要信息或有用的信息。

回答

0

你應該能夠只是創建這樣的路線:

Router::connect('/admin/users/index', array('admin' => false, 'controller' => 'users', 'action' => 'index')); 

然後你就需要一個index.ctp視圖,而不是一個admin_index.ctp之一。但我不確定爲什麼會在你的應用程序中添加任何東西。管理員視圖通常具有自己的特定功能(例如,在用戶通過此操作後,授予對添加/刪除用戶的訪問權限),並且應該與「常規」視圖分開。 (否則你會得到與管理員驗證邏輯,這是不是真的太大的MVC應用程序的,這些東西在控制器屬於非常混亂的觀點。)

編輯:根據下面的評論,我只想從你的mod方法渲染管理視圖,並設置一些標誌來確定他們可以做什麼以及不可以做什麼/看到什麼。例如:

function mod_index() { 
    $this->set('can_edit_users', 1); 
    $this->set('can_delete_users', 0); 

    // User admin_index view, rather then looking for mod_index view 
    $this->render('admin_index'); 
} 

然後在您的視圖中添加簡單的檢查以確定他們可以看不到的鏈接/信息。

+0

例如我有admin en版主,他們的權利幾乎與其他人相似,但不是創建兩個具有完全相同邏輯的方法是多餘的。如果您需要提交更改,它也會變得最糟糕。意見可以完全不同。 我想我只是想要兩個最好的... – MitchVdl

+0

根據您的意見編輯答案。 – Oldskool

+0

是的,我可以看到這是如何工作的索引頁面。即使確定要顯示或不顯示的鏈接也是一個好主意。但是你仍然有同樣的問題:在你的控制器中有兩個(或更多)方法做同樣的事情。但是通過反覆反思,這些變化需要更多的核心工作......我認爲這個想法就像這樣:例子。com/prefix/controller/action>將映射到controller :: prefix_action,並帶有視圖prefix_action.ctp。但是如果有可能檢查方法是否存在,那麼比默認的映射其他,所有自主? – MitchVdl