Автор Cakephp с несколькими таблицами “Users”

Я хотел бы знать, как иметь дело ТОЛЬКО С ОДНИМ процессом аутентификации и "пользователями" в нескольких таблицах. У меня есть 4 таблицы Users: пользователи, администраторы, художники, teamadmins, который у всех есть определенные поля, но я хотел бы, чтобы все эти пользователи смогли соединиться только через одну форму на домашней странице, и перенаправляемый после этого к их определенным панелям инструментов.

Я думаю, что перенаправления не должны быть проблемой, и некоторые добавленные маршруты должны работать, но я действительно не знаю, где смотреть/начинать к ake это все возможное.

Удачи,
Nicolas.

Править: вот конечное решение (благодаря deizel)

App::import('Component', 'Auth');
class SiteAuthComponent extends AuthComponent {

    function identify($user = null, $conditions = null) {
        $models = array('User', 'Admin', 'Artist');
        foreach ($models as $model) {
            $this->userModel = $model; // switch model
            $this->params["data"][$model] = $this->params["data"]["User"]; // switch model in params/data too
            $result = parent::identify($this->params["data"][$model], $conditions); // let cake do its thing
            if ($result) {
                return $result; // login success
            }
        }
        return null; // login failure
    }
}
16
задан Nicolas 25 June 2012 в 10:01
поделиться

1 ответ

AuthComponent CakePHP поддерживает аутентификацию только для одной модели «Пользователь» за раз. Модель выбирается установкой свойства 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, если вы не используете этот трюк .

20
ответ дан 30 November 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: