2010-09-27 2 views
1

Я работаю над существующим проектом, который имеет две области, в которые можно войти. Раздел администратора и передний конец.Рефакторинг реализации Zend_Auth

В настоящее время в разделе администрирования есть действие для входа, а передняя часть имеет свое действие для входа в систему. Администратор регистрируется с использованием таблицы базы данных специально для учетных записей администратора, передняя часть регистрируется с использованием другой таблицы.

Если администратор зарегистрирован и пытается выполнить вход в систему, ему предлагается войти в систему как пользовательский интерфейс (необходимо, поскольку пользователи, работающие с конечными пользователями, получают совершенно другой контент на основе проектов, с которыми они связаны, а admin - не связанных с одним конкретным проектом).

После входа в систему как пользователь переднего конца, их учетные данные администратора исчезли, и им необходимо снова войти в систему, если они попытаются повторно войти в раздел администратора.

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

Каков наилучший способ справиться с этим в рамках Zend Framework?

До сих пор я думаю потерять отдельные действия входа и иметь только один (нет необходимости в двух, правильно?), А затем мне приходится иметь дело с предоставлением отдельных учетных данных.

В настоящее время вход в систему как пользовательский интерфейс пользователя приводит к тому, что пользователь-администратор должен войти в систему, чтобы получить доступ к области администрирования. Это потому, что некоторые учетные данные $ _SESSION перезаписываются? Нужно ли мне каким-то образом создать пользовательскую переменную $ _SESSION для обработки этого пути ZF?

Очевидно, я не могу просто назначить значение $ _SESSION ['front_end'] или $ _SESSION ['admin'] (которое я бы сделал в тот же день), так как бы это сделать в рамках Zend Framework ?

Спасибо!

ответ

1

Первый вопрос, вам действительно нужно это сделать? Предполагая, что пользователи-администраторы могут получить доступ ко всем проектам, типичный подход к чему-то подобному заключается в том, чтобы дать администраторам выпадающее меню на лицевой панели, в котором перечислены все проекты, и позволяет им переключаться между ними. Как только они выбрали один, этот выбор сохраняется в их сеансе, и они могут просматривать данные так, как если бы они вошли в систему как один из этих пользователей. Затем они могут переключаться между проектами по своему усмотрению.

Если вам действительно нужны два входа, это, безусловно, должно быть возможно. По умолчанию Zend_Auth использует класс Zend_Auth_Storage_Session для хранения результата аутентификации в сеансе. Этот класс использует пространство имен «Zend_Auth» по умолчанию (т. Е. Данные хранятся в $_SESSION['Zend_Auth']), поэтому, когда ваш пользователь интерфейса успешно входит в админ, их данные аутентификации сеанса переписываются результатом авторизации admin. Так что вы хотите сделать Zend_Auth_Storage_Session, чтобы использовать другое пространство имен для логинов администратора (или собственное пространство имен для каждого).

В теории вы должны быть в состоянии сделать что-то вроде этого:

public function loginAction() 
{ 
    $auth = Zend_Auth::getInstance(); 
    if (...) { // check some condition that returns true for admin logins 
     // setup storage with custom admin namespace (can be any string) 
     $authStorage = new Zend_Auth_Storage_Session('Yourapp_Admin_Auth'); 
    } else { 
     // use defaults 
     $authStorage = new Zend_Auth_Storage_Session(); 
    } 
    $auth->setStorage($authStorage); 

    // carry on login as normal 
    [...] 
} 

так, что это делает становится Zend_Auth использовать $_SESSION['Yourapp_Admin_Auth'] для администратора логинов и по умолчанию $_SESSION['Zend_Auth'] для внешнего интерфейса них.

Смежные вопросы