ASP.Net MVC -条件未经授权的重定向
本文关键字:授权 重定向 条件 Net MVC ASP | 更新日期: 2023-09-27 18:18:15
我的MVC3应用程序为用户提供了三种登录方式
- Email + Alias
- OpenID提供者
- 用户名+密码
前两个是给没有账号的访客的,允许他们评论/投票;最后一种是针对拥有db用户帐户和高级权限的作者和管理员。因此有两个登录表单-一个用于访问者,一个用于完整用户。
未经身份验证/未经授权访问资源的尝试将被重定向到登录页面。
问题:
-
我如何有条件地将这些请求重定向到适当的?资源需要具有完整用户登录表单的作者/管理员权限,而资源只需要具有访问者登录表单的访问者权限?
-
另外,在AJAX或部分视图调用的情况下,我是否可以处理避免重定向?例如,我想嵌入评论部分视图在我的入口视图,如果他们是未经认证的,不重定向,但只是嵌入访问者登录那里。
更新:我不想维护2个Atuhorize属性
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
...
}
你可以使用一个或另一个,取决于场景,来装饰你的控制器动作