2

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

  1. 电子邮件 + 别名
  2. OpenID 提供者
  3. 用户名+密码

前两个适用于没有帐户的访问者,允许他们对事物发表评论/投票;最后一个适用于拥有具有提升权限的数据库用户帐户的作者和管理员。因此,有两种登录表单 - 一种用于访问者,一种用于完全用户。

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

问题:

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

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

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

4

1 回答 1

1

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

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

2-如果您从 ajax 调用(即$.Get(url)$("#somediv").Load(url))加载部分,请确保调用的操作url正确地用您的自定义装饰[AuthorizeAttribute]

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

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

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

更新

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

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public class IsUserAdminAttribute : CustomAuthorizedBaseAttribute
{
    // Custom logic to redirect to admin logon partial/view
    ...
}

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public class IsAuthenticatedAttribute : CustomAuthorizedBaseAttribute
{
    // Custom logic to redirect to basic/comment logon partial/view
    ...
}

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public abstract class CustomAuthorizedBaseAttribute : AuthorizeAttirbute
{
    // Shared custom logic implementation
    ...
}

您可以根据场景使用其中一种来装饰您的控制器操作。

于 2011-12-19T22:48:02.647 回答