2012-07-24 76 views
1

對於我的項目,我有三種類型的用戶。管理員,成員和其他人。 管理員和成員都可以執行某些功能。cakephp管理員和成員的常見操作

我知道如何做路由和檢查管理員,並調用管理方法。但是我不確定如何在用戶類型之間共享一個函數。

任何提示?

最佳, ř

回答

1

你可以簡單地使用Auth組件。 在您的應用/ Config/core.php文件中取消註釋Routing.prefixes = array('admin', 'manager');

藉助this link設置Auth組件。 現在,如果您的控制器的方法在兩個用戶角色'admin'和'manager'中很常見,那麼爲任何角色定義一個方法並在另一個方法中調用它很簡單。

比方說在你的UsersController.php

public function admin_list() 
{ 
    /*.... define here ..... */ 
} 
public function manager_list() 
{ 
    $this->admin_list(); 
} 

這項技術也將幫助你管理,如果你想展示一些其他的東西與管理員用戶角色的用戶列表。

+0

你也可以使用'setAction()'來實際使用這個動作並渲染它view。http://api20.cakephp.org/class/controller#method-ControllersetAction – jeremyharris 2012-07-25 14:48:02

+0

我已經取消了core.php中的行註釋,但是想知道是否在調用manager_list()時不會cakephp請求manager_list的視圖? – rajankz 2012-08-23 14:45:02

0

使用isAuthorized()從驗證部件。假設您的用戶在桌面用戶中。 在你AppController.php地說:

public function isAuthorized($user){ 
    return true; 
} 

在你的UsersController,讓說你要方法1和method2只爲管理員和會員,不爲別的可見。

public function isAuthorized($user){ 
    if(in_array($this->action, array('method1', 'method2'))){ 
      if($user['role'] != 'admin' || $user['role'] != 'user'){ 
       return false; 
      } 
    } 
    return true; 
} 

,當然,包括在AppController中您AuthComponent:

public $components = array('Session', 'Auth'); 

如果您有任何問題,請隨時問。 :)

+0

啊......所以我們可以覆蓋所需控制器中的isAuthorized?不知道,讓我試試。似乎更清潔。 Thx – rajankz 2012-08-23 14:47:25

+0

nope ...它仍然期待我將action命名爲admin_addEdit(),而不僅僅是addEdit()。我想保留動作名稱爲addEdit(),這樣這個通用動作就可以被'admin'和'creator'訪問:-( – rajankz 2012-08-23 14:51:42