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

本文关键字:授权 重定向 条件 Net MVC ASP | 更新日期: 2023-09-27 18:18:15

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

  1. Email + Alias
  2. OpenID提供者
  3. 用户名+密码

前两个是给没有账号的访客的,允许他们评论/投票;最后一种是针对拥有db用户帐户和高级权限的作者和管理员。因此有两个登录表单-一个用于访问者,一个用于完整用户。

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

问题:

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

  2. 另外,在AJAX或部分视图调用的情况下,我是否可以处理避免重定向?例如,我想嵌入评论部分视图在我的入口视图,如果他们是未经认证的,不重定向,但只是嵌入访问者登录那里。

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

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

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

查看选择的awnser是这个问题:在ASP中重定向未授权的控制器。净MVC

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

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

之类的东西
  @if (User.Identity.IsAuthenticated)
  {
      // Normal case
  }
  else
  {
      @Html.Partial("Login")
  }

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

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

[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
    ...
}

你可以使用一个或另一个,取决于场景,来装饰你的控制器动作