4

私の MVC アプリケーションには、5 種類のユーザーがいます。

guest, customer, deliver person, staff and admin

特定のユーザーがアクセス権のないページを表示しようとすると、特定のページにリダイレクトされ、残りのスクリプトが終了します。

たとえば、顧客または配達担当者がアクセス権のないページを表示しようとした場合、それらはリダイレクトされて戻ってきますhttp://www.mysite.com/members/。たとえば、ゲストがメンバー エリアにアクセスしようとすると、ログイン ページにリダイレクトされます。

Authのクラスはそのチェックを行い、ログインプロセスも担当しています。

$auth->login($username, $password)呼び出したログインの詳細を検証したら

$this->http->redirect()メソッドの下部にありlogin()ます。

public function redirect() {

    if($this->auth->isLoggedIn()) {

        switch($_SESSION['accountType']) {

            case 1:
            $url = $this->config->setting('url.members');
            break;

            case 2:
            $url = $this->config->setting('url.members');
            break;

            case 3:
            $url = $this->config->setting('url.staff');
            break;

            case 4:
            $url = $this->config->setting('url.admin');
            break;

        }

    }
    else {
        $url = $this->config->setting('url.base') . 'login';
    }

    $this->setHeader('Location', $url);

}

この$http->respond()メソッドは後で呼び出され、追加されたヘッダー (上記で追加された「場所」など) を送信します。

redirect()メソッドが実行すべきではない作業を実行していると考えていますが、よくわかりません。私には、私のHttpクラスは、人々がログインしているかどうか、人々が持っているアカウントの種類をチェックするべきではなく、ヘッダーを追加して応答をクライアントに送り返すなどのことだけを行うべきだと思われますが、持っているのは間違っているようですクラスのredirect()メソッドAuthも承認のみを処理する必要があるためです。

どんなアイデアも素晴らしいでしょうありがとう。

4

1 に答える 1

0

Authクラスは、リダイレクト先のリンクを決定するべきではありませんが、正しいリダイレクトを行うためにHttpクラスが必要とする指示を提供する必要があります。これがあなたのアプローチの問題です:あなたのHttpクラスはあまりにも多くを知っています。これで、URL自体がAuthクラスで計算される場合、Authクラスは多くのことを認識します。主なアイデアは、パラメーターを使用してリダイレクトメソッドを使用することであり、パラメーターは呼び出し元のクラス(Authまたは別のクラス)で決定する必要があります。

于 2012-12-31T13:27:26.803 に答える