현재 다른 사용자가 로그인 할 수있는 사이트가 있으며 하위 도메인에 따라 다른 데이터베이스의 다른 데이터가 표시됩니다. 이 게시물의 지침에 따라, 나는 동적으로 초기화 방법 중에 설정 "임시"연결 문자열을 사용하는 SqlMembershipProvider를 무시하고 :이 동적 로그인 구성표를 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 클래스는 "정적 것이다 "여러 명의 사용자가 서로 다른 하위 도메인에서 연결될 때 각각의 데이터베이스가 아닌 하나의 데이터베이스에서 사용자 계정을 보게됩니다. Initialize가 요청에 따라가 아니라 응용 프로그램에서 호출 된 것처럼 보입니다.
제 질문은 ...이 문제를 해결하는 가장 쉬운 방법은 무엇입니까?
이전에 사용자 지정 공급자를 작성한 적이 없으므로 그 작동 방식이나 제한 사항을 잘 모릅니다. 그리고 제가 직접 작성한다면, 뭔가를 간과하면 보안 허점이 발생할 가능성이 있습니다 (걸릴 시간은 말할 것도 없습니다). 어떤 아이디어?
업데이트 1 : 특정 하위 도메인의 사용자는 다른 하위 도메인의 사용자를 보지 않고도 자신의 하위 도메인 내에서 사용자를 추가/편집/삭제할 수있는 능력이 필요합니다. 이것이이 제도 하에서 가능한가?
대단원! 내가 뭘 찾고 있었는지. 난 항상 내 하위 도메인 연결 문자열 메서드를 호출하기 위해 SqlConnectionHelper 내부의 코드를 대체했습니다. 그렇게하면 초기화 된 첫 번째 연결 문자열을 "캐시하지"않습니다! –