我在 MVC Razor 网站上使用会员资格提供程序。
客户创建帐户然后登录后,我需要确保他们在登录中添加系统帐户,否则以下页面会出现问题。
这是我的页面的样子:
如您所见,他们可以单击顶部的任何选项卡并绕过此屏幕。
处理这个问题的最佳方法是什么?
我应该禁用标签吗?如果是这样,我将在哪里禁用它们?还是我应该检查每个页面并将它们重定向回此页面?
谢谢您的帮助!
我在 MVC Razor 网站上使用会员资格提供程序。
客户创建帐户然后登录后,我需要确保他们在登录中添加系统帐户,否则以下页面会出现问题。
这是我的页面的样子:
如您所见,他们可以单击顶部的任何选项卡并绕过此屏幕。
处理这个问题的最佳方法是什么?
我应该禁用标签吗?如果是这样,我将在哪里禁用它们?还是我应该检查每个页面并将它们重定向回此页面?
谢谢您的帮助!
在加载任何其他页面之前,您应该检查是否已输入该信息。(可能在动作过滤器中)
如果您只是禁用链接,恶意用户可以直接导航到 URL。
如果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();
}
您是否考虑过使用额外的 Membership ROLE 来指示客户已添加“系统帐户”信息,例如CustomerWithSystemAccountInfo。
然后你可以保护控制器动作[Authorize(Roles = "CustomerWithSystemAccountInfo")]
至于基于 ROLE 隐藏或禁用 _layout 中的菜单选项,以下文章提供了一种我非常喜欢的方法: