В настоящее время у меня есть сайт, на котором разные пользователи могут войти в систему, и в зависимости от их субдомена представлены разные данные из разных баз данных. Я переопределяю SqlMembershipProvider, чтобы использовать строку подключения «temp», которую я динамически устанавливаю во время метода Initialize, согласно инструкциям этого поста:
http://forums.asp.net/p/997608/2209437.aspx
public override void Initialize(string name, NameValueCollection config)
{
// intercept the setting of the connection string so that we can set it ourselves...
string specifiedConnectionString = config["connectionStringName"];
ConnectionStringSettings connectionString = ConfigurationManager.ConnectionStrings[specifiedConnectionString];
var fi = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
fi.SetValue(connectionString, false);
connectionString.ConnectionString = WakeflyClientHelper.GetClientConnectionStringByCurrentSubdomain();
config["connectionStringName"] = connectionString.Name;
// Pass doctored config to base classes
base.Initialize(name, config);
}
Проблема в том, что класс SqlMembershipProvider выглядит «статичным» в том смысле, что когда несколько пользователей подключаются из разных поддоменов, они в конечном итоге видят учетные записи пользователей из ОДНОЙ из баз данных, а не из своих собственных. Похоже, что Initialize вызывается приложением, а не для каждого запроса.
Итак, мой вопрос к вам ... Какой самый простой способ реализовать решение этой проблемы?
Раньше я не писал собственного провайдера, поэтому я не уверен, как это работает или каковы ограничения. И если я напишу это сам, всегда будет возможность дыр в безопасности, если я что-то упущу (не говоря уже о времени, которое потребуется). Есть идеи?
Обновление 1:
Я мог бы иметь одну базу данных, однако пользователю в данном поддомене нужна возможность добавлять / редактировать / удалять пользователя в своем собственном поддомене, не видя пользователей других поддоменов. Возможно ли это по этой схеме?