我正在尝试限制对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_edit
和view
操作会导致SQL错误。它们似乎依赖于某些在使用我的AppUsersController时由于某种原因未加载的行为。他们分别在用户模型上调用User->edit
和User->view
。没有加载的行为实现这些方法,因此用户模型尝试将其传递给DataSource,因此SQL错误。此外,edit
上的User->UserDetails
操作错误未设置为对象的实例。用户模型是否未以某种方式进行初始化?
感谢任何帮助。
答案 0 :(得分:0)
所以我通过将CakeLog:debug()
插入用户插件代码中的可疑函数来找出它,以查看未运行的内容。
我不得不在扩展插件用户控制器的AppUsers控制器中初始化User模型:
顶部:
App::uses('User', 'Users.Model');
在beforeFilter:
$this->User = ClassRegistry::init('Users.User');
我知道如果我扩展模型,我必须为我的扩展模型做到这一点,但我不是(还),所以我认为我不需要。