1

モジュール全体でアクセス制御を実行する方法を考えています。説明させてください:セッションを作成するためだけに開発されたモジュール(/ authentication /)がある場合。そして、メインアプリケーションを含む別のモジュール(/ Main /)。

私がしたいのは、セッションがユーザーによって正しく作成されたかどうかをメインモジュールで要求をチェックインすることです。

インターネットで調べているうちに、それを行う方法を見ました。よくわからないので、解決策が適切かどうか教えてください。セッションが正しく作成されているかどうかを確認するイベントをブートストラップ関数(module.php)に実装します。そうでない場合は、モジュール認証にリダイレクトします。

public function onBootstrap($e){

    $eventManager = $e->getApplication()->getEventManager();

    $auth = new AuthenticationService();
    if (!$auth->hasIdentity()) {
        $response  = $e->getResponse();
        $response->getHeaders()->addHeaderLine('Location', 'authentification');
        $response->setStatusCode(302);
    }

    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);
}

このソリューションについてどう思いますか?

残念ながら、この解決策は良くありません。理由はわかりませんが、モジュール認証でもこのコードが実行されているようです。したがって、URL:/ mainにアクセスしようとしている最初の呼び出しで、モジュール/ authenticationにリダイレクトされ、コードが再実行され、モジュールが/ authenticationにリダイレクトされ、何度も何度もリダイレクトされます。また...

したがって、解決策は、要求されたURLがこの/authenticationと異なるかどうかを確認することだと思います。

これを行う方法 ?

私の質問が明確で簡単に理解できることを願っています。

ありがとう=D

4

1 に答える 1

2
public function onBootstrap(MvcEvent $e) {

        $eventManager = $e->getApplication()->getEventManager();

        $eventManager->attach(MvcEvent::EVENT_DISPATCH, function($e) {

            $controller = $e->getTarget();
            $auth = new AuthenticationService();
            $is_login = $auth->hasIdentity();


                        //check if action is login

            $params = $e->getApplication()->getMvcEvent()->getRouteMatch()->getParams();

            if ($params['action'] == 'login') {


                if ($is_login) {
                    return $controller->redirect()->toRoute('adminindex');
                }

            } else {


                if (!$is_login) {
                    return $controller->redirect()->toRoute('adminauthlogin');
                }

            }
});

    }

もう少し良い解決策;)

于 2013-02-08T13:59:16.010 に答える