我正在开发一个项目,其中我有一个后台区域(管理区域),配置系统和前台区域,供典型用户开展业务。
也就是说,应用程序需要有一个Backoffice Login和另一个Frontoffice Login。每个必须分开。
我开发使用Asp Identity 2.0,Backoffice和Frontoffice登录和注册不同的区域,效果很好。
例如,后台区域可以有一个“myuser”用户名,前台区域可以有一个“myuser”用户名,因为每个用户名都保存在不同的表中。
我已经开发了一个自定义区域授权来管理它。
我的问题是,当用户登录到Backoffice区域时,如果他前往前台区域,他仍然报告已登录...
如何为每个区域分隔User.Identity登录?
提前致谢!!
答案 0 :(得分:0)
采用的解决方案:
1)创建Front Office授权属性和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" });
}
}
}
}
在管理用户身份和BBBBOOOMMMM时,只需将if(Request.IsAuthentifacted)更改为您想要执行的操作:)