2009-02-02 3 views
1

В настоящее время у меня есть сайт, на котором могут войти пользователи, и в зависимости от их поддомена представлены разные данные из разных баз данных. Я перекрывая SqlMembershipProvider использовать строку подключения «Темп», который я динамически устанавливать во время метода Initialize, в соответствии с инструкциями этого данным сообщения:Самый простой способ реализовать эту динамическую схему входа для asp.net

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 кажется «статическим «в том случае, когда несколько пользователей подключаются из разных поддоменов, они заканчивают просмотр учетных записей пользователей из ОДНОЙ из баз данных, а не каждый из них. Похоже, что Инициализация вызывается приложением, а не на основе запроса.

Итак, мой вопрос к вам ... Какой был бы самый простой способ реализовать это решение?

Я раньше не писал пользовательских поставщиков, поэтому я не уверен, как это работает, или каковы ограничения. И если я сам пишу сам, всегда есть возможность дыры в безопасности, если я пропущу что-то (не говоря уже о времени, которое потребуется). Есть идеи?

Обновление 1: У меня может быть одна база данных, однако пользователю в пределах данного поддомена требуется возможность добавлять/редактировать/удалять пользователя в пределах своего собственного домена, не видя других пользователей поддоменов. Возможно ли это по этой схеме?

ответ

2

Код для SqlMembershipProvider предоставляется here. Вы можете расширить/изменить то, что, по вашему мнению, необходимо, добавив проект в свое решение и изменив ссылки пространства имен в web.config.

+0

Отлично! Только то, что я искал. Я просто заменил код внутри SqlConnectionHelper, чтобы всегда вызывать метод строки подключения к домену. Таким образом, он не «кэширует» первую строку соединения, с которой она инициализируется! –

0

Я сделал именно это, используя единую базу данных членства для обработки всех логинов, а затем подключить их к соответствующей базе данных в зависимости от области, в которой они вошли в систему.

Смежные вопросы