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 回答