我已按照教程和所有 CakePHP 授权指南进行操作,但无法调用我的 isAuthorized() 方法。我的理解(如果我错了,请纠正我,这极有可能)是通过'authorize'->['Controller']
in将授权委托给特定的控制器AppController.php
,当调用 UsersController 中的方法时,在本例中为“add”,UsersController 将运行isAuthorized()
我定义的方法。我正在测试这个方法是否运行,在isAuthorized()
被调用时输出一个 flash->error 消息,但没有任何反应。如果我显式调用isAuthorized($hardcodeduser)
我的beforeFilter()
方法,它将起作用,但前提是我对用户进行硬编码。
该方法应该工作的方式是:如果注册用户请求添加/创建新用户,系统会检查用户是否具有管理员/员工级别的权限(数据库中只是一个 0 或 1 值)如果用户没有权限,那么它会重定向到主屏幕,并显示一条错误消息,显示“您无权访问该功能”。
任何帮助或建议或其他链接将不胜感激!
class AppController extends Controller {
public $components = ['Flash', 'Auth', 'Session'];
public function initialize() {
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
'authorize' => ['Controller'],
'loginRedirect' => [
'controller' => 'Articles',
'action' => 'index'
],
'logoutRedirect' => [
'controller' => 'Pages',
'action' => 'display',
'home'
]
]);
}
public function beforeFilter(Event $event) {
$this->Auth->authorize = 'Controller';
}
public function isAuthorized($user) {
if(isset($user['is_staff']))
return true;
return false;
}
}
class UsersController extends AppController {
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
$this->Auth->allow(['logout']);
}
public function isAuthorized($user) {
$this->Flash->error(__('Test Message PLEASE WORK'));
if($this->request->action === 'add') {
$isStaff = $user['is_staff'];
if($isStaff == 0) {
$this->redirect($this->Auth->redirectUrl());
$this->Flash->error(__('Not authorized to access this function'));
return false;
}
}
return parent ::isAuthorized($user);
}
}