【问题标题】:CakePHP 2.4.4 isAuthorized() not working properlyCakePHP 2.4.4 isAuthorized() 无法正常工作
【发布时间】: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
  • 否,如果以普通用户身份登录,即使角色不是管理员,我也可以访问管理页面

标签: cakephp admin


【解决方案1】:

在函数isAuthorized:

$this->request->params['admin']

总是不为空,所以它返回true 值:)

【讨论】:

  • 这并不总是为我设置的
猜你喜欢
  • 1970-01-01
  • 2018-11-26
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多