ASP.Net MVC - 有条件的未授权重定向

时间:2011-12-19 21:49:54

标签: c# asp.net-mvc asp.net-mvc-3 redirect unauthorized

我的MVC3应用程序为用户提供了三种登录方式

  1. 电子邮件+别名
  2. OpenID提供商
  3. 用户名+密码
  4. 前两个是没有账户的访客,允许他们对事情发表评论/投票;最后一个是具有提升权限的db用户帐户的作者和管理员。因此,有两个登录表单 - 一个用于访问者,一个用于完整用户。

    未经身份验证/未经授权的访问资源的尝试将被重定向到登录页面作为标准。

    问题:

    1. 我如何有条件地将这些请求重定向到相应的?需要对完整用户登录表单的作者/管理员权限的资源,以及仅要求访问者登录表单的访问者权限的资源?

    2. 另外,在AJAX或部分视图调用的情况下,我可以处理避免重定向吗?例如,我想在我的条目视图中嵌入评论部分视图,如果它们未经身份验证,不是重定向,而只是将访问者登录嵌入那里。

    3. 更新:我不想维护2个Atuhorize属性。

1 个答案:

答案 0 :(得分:1)

1-您可以从[AuthorizeAttribute]继承并自定义实施以路由到所需的未授权页面。

看到所选的awnser是这个问题: Redirecting unauthorized controller in ASP.NET MVC

2-如果您正在加载来自ajax调用的部分内容(例如,$.Get(url)$("#somediv").Load(url)),请确保url调用的操作已使用您的自定义{ {1}}。

否则,您需要在剃刀视图中使用一些逻辑来检查用户是否经过身份验证。

的内容
[AuthorizeAttribute]

您的登录部分将显示所需的登录视图。

<强>更新

您可以实现2个不同的属性,每个方案一个。

  @if (User.Identity.IsAuthenticated)
  {
      // Normal case
  }
  else
  {
      @Html.Partial("Login")
  }

根据具体情况,您可以使用其中一个来装饰您的控制器操作。