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

Pau*_*ulJ 2 cakephp

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

public function isAuthorized() {
    return true;
    }
Run Code Online (Sandbox Code Playgroud)

但是......它只是感觉不对.我看看上面的函数,坦率地说,它看起来像TheDailyWTF.(而CakePHP抱怨如果我没有isAuthorized()功能,所以我无法真正删除它).

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

Moz*_*ris 5

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

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

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

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

要允许访问" 索引 "和" 查看 "操作:

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

编辑

以下评论如下:

您可以将Auth组件的authorize属性设置为'controller',然后定义回调.所以你的控制器将包含类似于:

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

public function isAuthorized() {
  return true; 
}
Run Code Online (Sandbox Code Playgroud)

这样,您就不必更改核心,它会按照您的需要进行操作.