【发布时间】:2014-01-06 21:54:19
【问题描述】:
我正在使用 CakeDC 用户插件,但我无法让只有管理员才能查看管理部分,因为任何注册用户都可以访问管理员。我做错了什么?
AppController.php
class AppController extends Controller {
public $components = array(
'DebugKit.Toolbar',
'Auth' => array('authorize' => array('Controller')
)
);
public function isAuthorized($user = null) {
// Any registered user can access public functions
if (empty($this->request->params['admin'])) {
return true;
}
// Only admins can access admin functions
if (isset($this->request->params['admin'])) {
return (bool)($user['role'] === 'admin');
}
// Default deny
return false;
}
public function beforeFilter(){
$this->Auth->allow("display");
if ($this->Auth->loggedIn()) {
$this->layout = 'loggedin';
}
}
}
UsersController.php(来自 CakeDC 用户插件控制器)
//other code here
public function isAuthorized($user = null) {
return parent::isAuthorized($user);
}
//other code here
routes.php
Router::connect('/users', array('plugin' => 'users', 'controller' => 'users'));
Router::connect('/users/index/*', array('plugin' => 'users', 'controller' => 'users'));
Router::connect('/users/:action/*', array('plugin' => 'users', 'controller' => 'users'));
Router::connect('/users/users/:action/*', array('plugin' => 'users', 'controller' => 'users'));
Router::connect('/login', array('plugin' => 'users', 'controller' => 'users', 'action' => 'login'));
Router::connect('/logout', array('plugin' => 'users', 'controller' => 'users', 'action' => 'logout'));
Router::connect('/register', array('plugin' => 'users', 'controller' => 'users', 'action' => 'add'));
Router::connect('/admin', array('plugin' => 'users', 'controller' => 'users', 'admin' => true));
Router::connect('/admin/:action/*', array('plugin' => 'users', 'controller' => 'users', 'admin' => true));
core.php
Configure::write('Routing.prefixes', array('admin'));
编辑: 当我在组件中调用 authorize = array('Controller') 时,没有调用 isAuthorized()。必须在 AppController 的 beforeFilter() 中添加这个: $this->Auth->authorize = 'Controller';
【问题讨论】:
-
到底发生了什么?您仍然无法访问管理后端?确定角色已设置并且是身份验证会话的一部分?或者,您可以让控制器保持纤薄并使用Tiny。
-
否,如果以普通用户身份登录,即使角色不是管理员,我也可以访问管理页面