扩展用户控制器时CakeDC用户插件中断

时间:2013-05-28 22:53:31

标签: cakephp

我正在尝试限制对CakeDC用户插件中管理用户的访问权限。据我所知,这需要扩展UsersController,但我似乎无法做到这一点:无论我做什么都会破坏(我花了几天时间)。

我一直在关注用户插件自述文件中的说明:https://github.com/CakeDC/users。我从自述文件中复制了render方法以使用插件的视图。我使用空函数覆盖_setupAuth,但随后将原始_setupAuth的大部分复制到我的beforeFilter

AppUsersController.php:

public function beforeFilter() {
        parent::beforeFilter();

        $this->Auth->allow('login');

        $this->Auth->authenticate = array(
            'Form' => array(
                'fields' => array(
                    'username' => 'email',
                    'password' => 'password'),
                'userModel' => 'Users.User',
                'scope' => array(
                    'User.active' => 1,
                    'User.email_verified' => 1)
            )
        );

        $this->Auth->loginRedirect = '/';
        $this->Auth->logoutRedirect = array('plugin' => null, 'controller' => 'app_users', 'action' => 'login');
        $this->Auth->loginAction = array('admin' => false, 'plugin' => null, 'controller' => 'app_users', 'action' => 'login');
    }

我进入了为我的扩展控制器更改它们的路线,就像自述文件中只有几处更改一样。首先我添加了管理路由,因为管理员端仍在使用原始插件的控制器。其次,我使用users/users/:action切换users/:action路由,因为我一直错过方法错误(即'/ users / users / login'试图在我的应用中的用户控制器中查找用户操作,而不是插入)。

routes.php文件:

Router::connect('/admin/users', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true));
Router::connect('/admin/users/index/*', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true));
Router::connect('/admin/users/:action/*', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true));
Router::connect('/admin/users/users/:action/*', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true));
Router::connect('/users', array('plugin' => null, 'controller' => 'app_users'));
Router::connect('/users/index/*', array('plugin' => null, 'controller' => 'app_users'));
Router::connect('/users/:action/*', array('plugin' => null, 'controller' => 'app_users'));
Router::connect('/users/users/:action/*', array('plugin' => null, 'controller' => 'app_users'));
Router::connect('/login/*', array('plugin' => null, 'controller' => 'app_users', 'action' => 'login'));
Router::connect('/logout/*', array('plugin' => null, 'controller' => 'app_users', 'action' => 'logout'));
Router::connect('/register/*', array('plugin' => null, 'controller' => 'app_users', 'action' => 'add')); 

现在有点工作了。 admin_editview操作会导致SQL错误。它们似乎依赖于某些在使用我的AppUsersController时由于某种原因未加载的行为。他们分别在用户模型上调用User->editUser->view。没有加载的行为实现这些方法,因此用户模型尝试将其传递给DataSource,因此SQL错误。此外,edit上的User->UserDetails操作错误未设置为对象的实例。用户模型是否未以某种方式进行初始化?

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

所以我通过将CakeLog:debug()插入用户插件代码中的可疑函数来找出它,以查看未运行的内容。

我不得不在扩展插件用户控制器的AppUsers控制器中初始化User模型:

顶部:

App::uses('User', 'Users.Model');

在beforeFilter:

$this->User = ClassRegistry::init('Users.User');

我知道如果我扩展模型,我必须为我的扩展模型做到这一点,但我不是(还),所以我认为我不需要。