CakePHP:我总是需要使用isAuthorized()吗?

时间:2011-11-14 17:54:54

标签: cakephp

据我了解,CakePHP的isAuthorized()函数用于检查登录用户是否具有执行给定操作的一组权限;换句话说,它不是用于检查用户是否具有正确的登录/密码(这是login()的用途)。由于我正在编写的应用程序实际上没有任何权限,但只需要检查用户是否登录,我写了以下isAuthorized()函数:

public function isAuthorized() {
    return true;
    }

但是......感觉错误。我看看上面的函数,坦率地说,它看起来像TheDailyWTF。 (如果我没有isAuthorized()函数,CakePHP会抱怨,所以我无法删除它。)

所以我想要确保我没有错:如果我的应用只需要查看用户是否登录,没有任何进一步的权限,那么上述功能就足够了?

1 个答案:

答案 0 :(得分:5)

我认为你正在使用Cake的Auth组件,因为这是isAuthorized()函数所在的位置。

最快的方法是在控制器的beforeFilter()中定义“允许的操作”。

例如,允许所有操作的所有访问权限:

/**
 * Sets all actions to be allowed
 */
public function beforeFilter() {
  parent::beforeFilter();
  if (isset($this->Auth)) {
    $this->Auth->allow('*');
  }
}

允许访问“索引”& '查看'操作:

/**
 * Allow access to index & view actions
 */
public function beforeFilter() {
  parent::beforeFilter();
  if (isset($this->Auth)) {
    $this->Auth->allowedActions = array('index', 'view');
  }
}

修改

以下评论:

您可以将Auth组件的 authorize 属性设置为“controller”,然后定义回调。因此,您的控制器将包含类似于:

的内容
public function beforeFilter() {
  parent::beforeFilter();
  $this->Auth->authorize = 'controller';
}

public function isAuthorized() {
  return true; 
}

通过这种方式,您不必更改核心,它可以满足您的需要。