Я думаю, что у меня есть рабочее решение, которое держит каждую область совершенно отдельно. Используя шаблон по умолчанию в качестве отправной точки, я добавил еще один конструктор в класс MvcApplication1.Models.AccountMembershipService для принятия строки (также изменил существующие конструкторы для устранения неоднозначности).
public AccountMembershipService()
{
_provider = Membership.Provider;
}
public AccountMembershipService(MembershipProvider provider)
{
_provider = provider ?? Membership.Provider;
}
public AccountMembershipService(string applicationName)
: this()
{
_provider.ApplicationName = applicationName;
}
Затем я скопировал AccountController в каждую область и изменил перегрузку Initialize, чтобы включить имя области из данных маршрута.
protected override void Initialize(RequestContext requestContext)
{
if (FormsService == null) { FormsService = new FormsAuthenticationService(); }
if (MembershipService == null) { MembershipService = new AccountMembershipService(requestContext.RouteData.DataTokens["area"].ToString()); }
base.Initialize(requestContext);
}
Теперь каждая область регистрируется как новое приложение с проверкой подлинности с помощью форм, и все пользователи и роли должны храниться отдельно.