2009-02-02 4 views
1

현재 다른 사용자가 로그인 할 수있는 사이트가 있으며 하위 도메인에 따라 다른 데이터베이스의 다른 데이터가 표시됩니다. 이 게시물의 지침에 따라, 나는 동적으로 초기화 방법 중에 설정 "임시"연결 문자열을 사용하는 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 : 특정 하위 도메인의 사용자는 다른 하위 도메인의 사용자를 보지 않고도 자신의 하위 도메인 내에서 사용자를 추가/편집/삭제할 수있는 능력이 필요합니다. 이것이이 제도 하에서 가능한가?

답변

2

SQLMembershipProvider의 코드가 제공됩니다 here. 프로젝트를 솔루션에 추가하고 web.config에서 네임 스페이스 참조를 변경하여 필요하다고 생각되는 부분을 확장/변경할 수 있습니다.

+0

대단원! 내가 뭘 찾고 있었는지. 난 항상 내 하위 도메인 연결 문자열 메서드를 호출하기 위해 SqlConnectionHelper 내부의 코드를 대체했습니다. 그렇게하면 초기화 된 첫 번째 연결 문자열을 "캐시하지"않습니다! –

0

내가 정확히 수행이 모든 로그인을 처리하고 그들에 기록하는 도메인에 따라 적절한 데이터베이스에를 연결하는 하나의 회원 데이터베이스를 사용했다.

관련 문제