CakePHP Auth拒绝管理员路由页面
我整个下午一直在阅读Stack Overflow问题,试图解决这个问题.
我有一个带索引/登录/注销/注册功能的用户控制器,但也有admin_index / admin_add / admin_edit / admin_delete等. 我启用了Auth组件,在我的users_controller中,我试图拒绝访问admin_ *页面,如果Auth.User.role!=’admin’,当我启用$this-> Auth-> authorize =’控制器时“;它拒绝访问site.com/admin/users/页面,即使我的帐户将角色设置为admin,也似乎会终止注销功能. 但是,如果我在i中键入url,则会重定向回主页面. users_controller.php中 <?php class UsersController extends AppController { var $name = 'Users'; function beforeFilter(){ parent::beforeFilter(); $this->Auth->authorize = 'controller'; $this->Auth->allow('register'); } function isAuthorized() { if ($this->Auth->user('role') != 'admin') { $this->Auth->deny('admin_index','admin_view','admin_add','admin_edit','admin_delete'); } } app_controller.php <?php class AppController extends Controller { var $components = array('Auth','Session'); function beforeFilter() { $this->Auth->loginAction = array('controller'=>'users','action'=>'login','admin'=>false); $this->Auth->logoutRedirect = array('controller'=>'users','action'=>'logout'); $this->Auth->loginRedirect = array('controller'=>'shows','action'=>'index'); $this->Auth->autoRedirect = false; $this->Auth->allow('home'); } 我的第二个问题涉及$this-> Auth-> deny(‘page’);重定向用户,据我所知它重定向到/但我需要它重定向回用户控制器. 希望这一切都有意义,我提供了足够的信息.. 解决方法
问题的根源可能是你的isAuthorized()方法.这应该只返回true或false,并指示经过身份验证的用户是否已授权访问特定操作.
很难说为什么要重定向到主页而不是登录页面.但是你可能在某个地方有其他代码搞砸了. 尝试修改您的代码,如下所示,看看这是否有助于让事情顺利进行: app_controller.php <?php class AppController extends Controller { var $components = array('Session','Auth' => array( 'loginAction' => array('controller'=>'users','admin'=>false),'logoutRedirect' => array('controller'=>'users','action'=>'logout'),'loginRedirect' => array('controller'=>'shows','action'=>'index'),'autoRedirect' => false,'authorize' => 'controller' ); function beforeFilter() { $this->Auth->allow('home'); } function isAuthorized() { if (!empty($this->params['prefix']) && $this->params['prefix'] == 'admin') { if ($this->Auth->user('role') != 'admin') { return false; } } return true; } ?> users_controller.php中 <?php class UsersController extends AppController { var $name = 'Users'; function beforeFilter(){ parent::beforeFilter(); $this->Auth->allow('register'); } ?> 我将所有Auth设置移动到$components变量中的声明,因为它看起来更干净,并且在那里声明默认值更有意义.但这更多的是个人偏好问题,它不应该对代码的功能产生实际影响. 另请注意,如果将autoRedirect设置为false,则必须在Users :: login()操作中手动重定向登录用户,使用$this-> Auth-> redirect()获取loginRedirect值. 我没有看到任何理由为什么你应该被发送到/当你没有登录并且你试图访问被阻止的动作,但是在你修复上述内容之后可能会更容易理解. ** (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |