检查一下:
function beforeFilter() {
$this->Auth->authorize = 'controller';
$this->Auth->allow('delete');
}
function isAuthorized() {
if ($this->Auth->user('role') != 'admin') {
$this->Auth->deny('delete');
}
...
}
(来自:http://book.cakephp.org/view/1255/AuthComponent-Methods#deny-1258)
这是isAuthorized的文档示例。如果我可以简单地在beforeFilter中设置条件,我还需要它?看起来像是无用的代码..
答案 0 :(得分:3)
它允许您将授权逻辑与可能驻留在beforeFilter回调中的其他逻辑分开。此外,由于它是一种方法,您可以通过在AppModel中实现继承来利用继承,还可以覆盖或扩展单个控制器中的功能。您引用的代码示例并未真正反映该方法应该返回true / false的事实。一个更好的例子可能是通过在AppModel中添加类似这样的内容来授权访问站点范围内的管理路由页面:
public function isAuthorized() {
if (isset($this->params['admin']) && $this->Auth->user('role') == 'admin') {
return true;
}
return false;
}