我的MVC3应用程序为用户提供了三种登录方式
前两个是没有账户的访客,允许他们对事情发表评论/投票;最后一个是具有提升权限的db用户帐户的作者和管理员。因此,有两个登录表单 - 一个用于访问者,一个用于完整用户。
未经身份验证/未经授权的访问资源的尝试将被重定向到登录页面作为标准。
问题:
我如何有条件地将这些请求重定向到相应的?需要对完整用户登录表单的作者/管理员权限的资源,以及仅要求访问者登录表单的访问者权限的资源?
另外,在AJAX或部分视图调用的情况下,我可以处理避免重定向吗?例如,我想在我的条目视图中嵌入评论部分视图,如果它们未经身份验证,不是重定向,而只是将访问者登录嵌入那里。
更新:我不想维护2个Atuhorize属性。
答案 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")
}
根据具体情况,您可以使用其中一个来装饰您的控制器操作。