2014-04-11 2 views
2

PRISM을 사용하여 WPF 응용 프로그램을 개발 중이며 셸 전에로드되는 로그인 기능을 구현해야합니다.프리즘 WPF 응용 프로그램에 로그인

  1. 가장 좋은 방법은 무엇입니까? 로그인을 모듈로 취급 하시겠습니까? 쉘과 함께 주 프로젝트에 넣으시겠습니까?

  2. 로그인이 올바르다면 나중에 응용 프로그램 (셸 및 모듈)에서 나중에 사용하기 위해 사용자 정보 (이름, 역할 등)를 저장해야합니다. 이 정보를 어디에서 어떻게 보관해야합니까?

미리 감사드립니다.

답변

6

이 논의는 쉘 전에 로그인 양식을 보여주는에 대한 해결책을 설명 http://compositewpf.codeplex.com/discussions/29570

으로 어떻게에 사용자의 정보를 저장하기 위해, 당신은 닷넷 GenericPrincipalGenericIdentity 클래스를 이용할 수 있습니다. 사용자 이름 및 역할과 같은 사용자에 대한 "기본"정보를 나타낼 수 있습니다. 그런 다음 주체/ID를 현재 스레드에 대해 저장할 수 있으므로 세부 정보에 액세스 할 수있는 일종의 정적/단일 클래스 생성에 대해 걱정할 필요가 없습니다. 또한 현재 사용자의 역할 구성원을 쉽게 확인할 수 있습니다.

개체를 작성하고이 같은 현재의 thread에 할당 : -

string[] roles = { "User", "Admin" }; 
Thread.CurrentPrincipal = new GenericPrincipal(
    new GenericIdentity("Joe"), 
    roles); 

을 그런 다음 세부 사항을 액세스 할 때마다 현재 로그인 한 사용자 : -

public string GetUsername() 
{ 
    var principal = Thread.CurrentPrincipal; 
    var identity = principal == null ? null : principal.Identity; 
    return identity == null ? null : identity.Name; 
} 

public bool IsInRole(string role) 
{ 
    var principal = Thread.CurrentPrincipal; 
    return principal == null ? false : principal.IsInRole(role); 
} 

GenericPrincipal 경우 GenericIdentity은 적합하지 않습니다. 응용 프로그램의 다른 부분으로 전달할 수있는 필수 속성 (이름, 역할 등)이있는 싱글 톤 클래스를 만듭니다 (예 : IoC 컨테이너를 사용합니다. 정적 클래스는 훨씬 더 쉬운 솔루션입니다 (주위를 돌아볼 필요가 없음). 정적은 단위 테스트를 더 까다로울 수 있습니다.

+0

공유해 주셔서 감사합니다. 'LoginViewModel'을 호출하는 적절한 장소는 어디에 있습니까? – Shimmy

+2

@Shimmy 코드를 살펴본 이후로 꽤 오래되었지만 Prism의 추상 Bootstrapper 클래스를 구현하는 "부트 스트 래퍼"클래스가 있으며 DI 컨테이너 (Castle Windsor)와 같은 것들을 설정합니다. 메인 윈도우 클래스가 인스턴스화되기 전에 부트 스트 래퍼의'InitializeShell()'메소드에 로그인 뷰를 보여줍니다. –

관련 문제