1

ログインできる領域が2つある既存のプロジェクトに取り組んでいます。管理セクションとフロントエンド。

現在、管理セクションにはログインアクションがあり、フロントエンドには独自のログインアクションがあります。管理者は、管理者アカウント専用のデータベーステーブルを使用してログインします。フロントエンドは、別のテーブルを使用してまとめてログインします。

管理者がログインしてフロントエンドにログインしようとすると、フロントエンドユーザーとしてログインするように求められます(フロントエンドユーザーは、関連付けられているプロジェクトに基づいてまったく異なるコンテンツを取得し、管理者は1つに関連付けられていないため必要です)特定のプロジェクト)。

フロントエンドユーザーとしてログインすると、管理者の資格情報が失われ、管理者セクションに再度アクセスしようとすると、再度ログインする必要があります。

管理者が管理セクションにログインし、特定のフロントエンドユーザーとしてログインできるようにしたいと思います。したがって、再ログインせずにサイトの2つのセクションを切り替えることができます。

Zend Framework内でこれを処理するための最良の方法は何ですか?

これまでのところ、個別のログインアクションを失い、1つだけにすることを考えています(2つは必要ありません、正しいですか?)。次に、個別の資格情報の許可に対処する必要があります。

現在、フロントエンドユーザーとしてログインすると、管理者ユーザーは管理領域にアクセスするために再度ログインする必要があります。これは、一部の$ _SESSIONクレデンシャルが上書きされているためですか?これをZFの方法で処理するには、どういうわけかカスタム$ _SESSION変数を作成する必要がありますか?

明らかに、$ _SESSION['front_end']または$_SESSION['admin'](以前は行っていたはずです)に直接値を割り当てることはできません。ZendFramework内でこれをどのように行うのでしょうか。

ありがとう!

4

1 に答える 1

1

最初の質問、あなたは本当にこれをする必要がありますか?管理者ユーザーがすべてのプロジェクトにアクセスできると仮定すると、このようなものへの一般的なアプローチは、すべてのプロジェクトを一覧表示し、プロジェクトを切り替えることができるフロントエンドのドロップダウンを管理者に提供することです。いずれかを選択すると、この選択がセッションに保存され、それらのユーザーの1人としてログインしているかのようにデータを表示できます。その後、プロジェクトを自由に切り替えることができます。

本当に2回のログインが必要な場合、これは確かに可能です。デフォルトでは、Zend_AuthはクラスZend_Auth_Storage_Sessionを使用して、認証の結果をセッションに保存します。このクラスはデフォルトでセッション名前空間'Zend_Auth'を使用するため(つまり、データはに保存され$_SESSION['Zend_Auth']ます)、フロントエンドユーザーが管理者に正常にログインすると、セッション認証データは管理者認証の結果によって上書きされます。したがって、実行したいのは、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']

于 2010-09-27T20:30:42.057 に答える