解決方案通過:
1)創建前廳授權屬性和BO授權屬性管理FO/BO登錄網頁:
public class AreaAuthorizeAttribute : AuthorizeAttribute
{
private readonly string area;
public AreaAuthorizeAttribute(string area)
{
this.area = area;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
RouteValueDictionary values;
if (!string.IsNullOrEmpty(area))
{
values = new RouteValueDictionary(new
{
Area = area,
Controller = "Account",
Action = "Login"
});
}
else
{
values = new RouteValueDictionary(new
{
Area = "Frontoffice",
Controller = "Account",
Action = "Login"
});
}
filterContext.Result = new RedirectToRouteResult(values);
}
}
第2部分)
要管理的身份BO和FO,即通過User.Identity得到所有人的正確身份,取決於你所在的區域,在Global.asax中創建了這種方法。
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
var user = (System.Security.Claims.ClaimsPrincipal)User;
if (user.Identities.Count() > 1)
{
if (HttpContext.Current.Request.Url.ToString().Contains("Frontoffice"))
{
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(user.Identities.First(), new string[] { "Admin" });
}
else
{
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(user.Identities.ElementAt(1), new string[] { "Admin" });
}
}
}
}
只要改變,如果任何你想要管理用戶身份何時做(Request.IsAuthentifacted)和BBBBOOOMMMM :)
我建議使用另一種方法。我認爲你正在混合兩個不同的概念:認證和授權。用戶通過身份驗證後,您應該檢查(授權)用戶是否有權訪問管理區域(可以檢查用戶是否具有「admin」角色)。 –
我也想到了這一點,但客戶端不想混用CMS和應用程序登錄...我準備的東西的方式,應用程序可以使用兩個不同的登錄名,但如果您登錄到CMS,User.Identity。 IsAuthenticated會說,用戶登錄的任何區域,我無法找到一種方法來檢查登錄是否在CMS或Frontoffice上完成...用戶角色是可能的,但我很想看看這是否可以工作與否! :)也嘗試使用不同的餅乾,但沒有這樣的運氣...... –
順便說一下,我認爲有可能管理多個身份,因爲System.Security.Claims.ClaimsPrincipal有一個身份列表。 –