我们正在使用Auth组件。我们目前能够阻止未登录的用户访问我们的“管理员”页面(adminhome.ctp)。但我们无法弄清楚如何让isAuthorized()
阻止非管理员访问该网页。
AppController内部:
public function beforeFilter() {
$this->Auth->allow('index', 'view', 'login', 'logout', 'display');
$this->Auth->authorize = array('Controller');
//$this->Auth->autoRedirect = false;
}
public function isAuthorized($user_id) {
$this->loadModel('User');
$user = $this->User->findById($this->Auth->user());
if ( $user['User']['role'] === 'admin') {
$this->Session->setFlash('isAuthorized');
return true;
}
$this->Session->setFlash('!isAuthorized');
return false;
}
这里是PagesController中的beforeFilter():
function beforeFilter() {
$this->Auth->deny('adminhome');
}
我们做错了什么?
答案 0 :(得分:2)
我刚刚使用了雅利安答案但是我做了一些小改动,这对其他人有帮助:
if($this->Session->read('Auth.User.role') != 'admin')
{
$this->Session->setFlash('You are not authorized to visit this page');
$this->redirect('/');
}
答案 1 :(得分:1)
我相信你的方式不起作用,因为你应该使用Auth-> deny()来限制对方法的访问,而adminhome不是PagesController中的方法。试试这个:
# in app/controller/PagesController.php
public function display() {
$page = empty($this->request->params['pass'][0]) ? null : $this->request->params['pass'][0];
if($page == 'adminhome' || $this->User->isAuthorized()) {
$this->render($page);
} else {
# redirect the user somewhere else
}
}
我希望这会有所帮助
答案 2 :(得分:0)
您将在用户表中拥有角色字段。特别是动作添加此行
if($this->Session->read('Auht.User.role') != 'admin') {
...............................
}
如果您只想要管理员可以查看某些控制器中的每个操作,例如admincontroller
您可以在beforeRender操作
中的该控制器中添加此代码if($this->Session->read('Auth.User.role') != 'admin')
{
$this->Session->setFlash(You are not authorized to visit this page,'flash',array('alert'=>'info'));
$this->redirect('/');
}