我有一个Auth进程,它可以很好地与一个userModel配合使用。但不仅仅是因为我的DB模式
一种登录方法/操作,可用于多个模型
。
到目前为止,我已经尝试了所有我能想到或在网上找到的东西,例如编辑
this Cake 1.3 solution
我找到了蛋糕3和其他一些提示。
然而,我无法理解。
谢谢你的回答。
我的AppController组件加载:
$this->loadComponent('ExtendedAuth', [
'authenticate' => [
'Form' => [
//'userModel' => 'Admins',
'fields' => [
'username' => 'email',
'password' => 'password'
]
]
],
'loginAction' => [
'controller' => 'Admins',
'action' => 'login'
],
// If unauthorized, return them to page they were just on
'unauthorizedRedirect' => $this->referer(),
]);
我的ExtendedAuthComponent:
class ExtendedAuthComponent extends AuthComponent
{
function identify($user = null, $conditions = null) {
$models = array('Admins', 'Users');
foreach ($models as $model) {
//$this->userModel = $model; // switch model
parent::setConfig('authenticate', [
AuthComponent::ALL => [
'userModel' => $model
]
]);
$result = parent::identify(); // let cake do its thing
if ($result) {
return $result; // login success
}
}
return null; // login failure
}
}
EDIT1:情况描述
我有两个单独的表(Admins、Users)。我只需要一个登录操作,尝试在用户之前使用Admins表。由于应用程序逻辑的原因,我无法将它们组合到一个具有类似“is\u admin”标志的表中。因此,基本上我需要的不是Auth config中的一个特定用户模型集,而是一组模型。听起来很简单,但我没能做到。
编辑2:选择的解决方案
根据下面的答案,我决定更新我的模式。Auth users表只是一个带有登录凭据的简化表,角色和其他特定于角色的字段则位于单独的表中,这些表用作其他特定于角色的表的连接。尽管答案并不完全是所提问题的解决方案,但它让我更多地思考了模式的任何可能更改,我找到了这个解决方案,因此我将其标记为解决方案。我也感谢所有的评论。