1

我正在尝试限制对 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/users/:action了路由,users/:action因为我一直缺少方法错误(即“/users/users/login”试图在我的应用程序的用户控制器中查找用户操作,而不是在插件中)。

路线.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->edit和。User->view没有加载的行为实现这些方法,因此用户模型尝试将其传递给数据源,因此出现 SQL 错误。此外,未将操作设置为对象的实例edit也会出错。User->UserDetails用户模型是否没有以某种方式初始化?

任何帮助表示赞赏。

4

1 回答 1

0

So I figured it out by inserting CakeLog:debug() into suspect functions in the User Plugin code to see what wasn't being run.

I had to initialize the User model in my AppUsers controller that was extending the plugin's Users controller:

At top:

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

In beforeFilter:

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

I knew that I would have to do that for my extended model if I was extending the model, but I am not (yet), so I thought I didn't need to.

于 2013-05-29T15:37:04.110 回答