3

我在 MVC Razor 网站上使用会员资格提供程序。

客户创建帐户然后登录后,我需要确保他们在登录中添加系统帐户,否则以下页面会出现问题。

这是我的页面的样子:

在此处输入图像描述

如您所见,他们可以单击顶部的任何选项卡并绕过此屏幕。

处理这个问题的最佳方法是什么?

我应该禁用标签吗?如果是这样,我将在哪里禁用它们?还是我应该检查每个页面并将它们重定向回此页面?

谢谢您的帮助!

4

3 回答 3

3

在加载任何其他页面之前,您应该检查是否已输入该信息。(可能在动作过滤器中)

如果您只是禁用链接,恶意用户可以直接导航到 URL。

于 2012-12-19T16:36:48.710 回答
2

如果RedirectToAction()他们还没有创建一个,例如使用

public ActionResult OrderGas(){

    // do check here to see if they have system account
    if (!hasSystemAccount()){

        // this will re-display the add another account page each time
        return RedirectToAction("AddAnotherAccountAction");
    }

    //other wise continue;
    return view("OrderGas");

}

或者,您可以使用 javascript 根据型号隐藏按钮

public ActionResult OrderGas(){

    // do check here to see if they have system account
    Boolean hasAccount = this.hasSystemAccount();

    // apply to the model
    model.hasSystemAccount = hasAccount;


    return view("OrderGas", model);

}

然后你的 jquery 可以检查这个值并相应地隐藏链接

if($('#hasSystemAccount').val().toLower() = "false"){

    $('.myLinkClass').hide();
}
于 2012-12-19T16:51:09.307 回答
0

您是否考虑过使用额外的 Membership ROLE 来指示客户已添加“系统帐户”信息,例如CustomerWithSystemAccountInfo

然后你可以保护控制器动作[Authorize(Roles = "CustomerWithSystemAccountInfo")]

至于基于 ROLE 隐藏或禁用 _layout 中的菜单选项,以下文章提供了一种我非常喜欢的方法:

http://techbrij.com/981/role-based-menu-asp-net-mvc

于 2012-12-22T02:16:32.210 回答