2012-07-24 78 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