【发布时间】: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_edit 和 view 操作会给出 SQL 错误。它们似乎依赖于在使用我的 AppUsersController 时由于某种原因未加载的某些行为。他们分别在用户模型上调用User->edit 和User->view。没有加载的行为实现这些方法,因此用户模型尝试将其传递给数据源,因此出现 SQL 错误。此外,edit 操作错误在 User->UserDetails 未设置为对象的实例上。用户模型是否没有以某种方式初始化?
感谢任何帮助。
【问题讨论】:
标签: cakephp