CakePHP AuthComponent
поддерживает аутентификацию только для одной модели «Пользователь» одновременно. Модель выбирается путем установки свойства Auth::userModel
, но она принимает только строку, а не массив моделей.
Вы можете переключить userModel
на лету с помощью следующего кода, но для этого необходимо заранее знать, на какую модель перейти (например, ваши пользователи должны выбрать тип своей учетной записи из раскрывающегося списка):
public function beforeFilter() {
if (isset($this->data['User']['model'])) {
$this->Auth->userModel = $this->data['User']['model'];
}
}
Скорее всего, ядро AuthComponent
можно расширить, добавив желаемую функциональность, переписав AuthComponent::identify()
метод , чтобы он зацикливался и пытался выполнить аутентификацию для каждой модели:
App::import('Component', 'AuthComponent');
class AppAuthComponent extends AuthComponent {
function identify($user = null, $conditions = null) {
$models = array('User', 'Admin', 'Artist', 'TeamAdmin');
foreach ($models as $model) {
$this->userModel = $model; // switch model
$result = parent::identify($user, $conditions); // let cake do it's thing
if ($result) {
return $result; // login success
}
}
return null; // login failure
}
}
Вам придется заменить вхождения Auth
в вашем приложении на AppAuth
, чтобы использовать расширенный AuthComponent, если вы не используете этот трюк .