【问题标题】:CakeDC users plugin breaking when extending users controller扩展用户控制器时 CakeDC 用户插件中断
【发布时间】:2013-05-28 22:53:30
【问题描述】:

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

我一直按照用户插件自述文件中的说明进行操作:https://github.com/CakeDC/users。我从自述文件中复制了渲染方法以使用插件的视图。我用一个空函数覆盖了_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/:action 切换了users/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。没有加载的行为实现这些方法,因此用户模型尝试将其传递给数据源,因此出现 SQL 错误。此外,edit 操作错误在 User->UserDetails 未设置为对象的实例上。用户模型是否没有以某种方式初始化?

感谢任何帮助。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

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

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

    在顶部:

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

    在前置过滤器中:

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

    我知道如果我要扩展模型,我必须为我的扩展模型这样做,但我(还没有),所以我认为我不需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多