我正在尝试限制对 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_edit
和view
动作给出 SQL 错误。它们似乎依赖于在使用我的 AppUsersController 时由于某种原因未加载的某些行为。他们分别在用户模型上调用User->edit
和。User->view
没有加载的行为实现这些方法,因此用户模型尝试将其传递给数据源,因此出现 SQL 错误。此外,未将操作设置为对象的实例edit
也会出错。User->UserDetails
用户模型是否没有以某种方式初始化?
任何帮助表示赞赏。