2012-12-24 2 views
0

AuthorisationManager에서 컨텍스트 원리가 어떻게 변경되는지 알지 못합니다. 내 코드는AuthorizationContext.Principal이 ClaimsPrincipal에서 GenericPrincipal로 자동 변경됩니다.

public class AuthorisationManager : ClaimsAuthorizationManager 
{ 
    public override bool CheckAccess(AuthorizationContext context) 
    { 
     var resource = context.Resource.First().Value; 
     var action = context.Action.First().Value; 
     return context.Principal.HasClaim(resource, action); 
    } 
    public override void LoadCustomConfiguration(System.Xml.XmlNodeList nodelist) 
    { 
     base.LoadCustomConfiguration(nodelist); 
    } 
} 

과 같습니다. GUI 목록이 있습니다. 처음에는 잘 작동하지만 두 번째 항목을 선택하면 context.Principle이 GenericPrinciple에 연결됩니다.

어떤 아이디어라도 도움이 될 것입니다.

답변

1

확인 - WPF.

그래, 나는 Thread.CurrentPrincipal 주위에 WPF에 "기능"이 있다는 것을 모호하게 기억합니다.

Thread.CurrentPrincipal = 주

AppDomain.CurrentDomain.SetThreadPrincipal (주) 시도;

IIRC App 클래스 (ctor?)에서이를 수행해야 할 수도 있습니다.

+0

내 응용 프로그램은 WPF 기반 데스크톱 응용 프로그램이며 사용자 클레임을 ClaimsIdentity에로드하고 있습니다. 잘못 되었나요? 제발 정정 해주세요. 어떻게 그것을 기반으로 권한을 주장의 목적을 이길 수 있습니다. –

+0

완벽한 하나 .. 덕분에 많이 .. Logged –

1

"return context.Principal.HasClaim (resource, action);"

글쎄, 일반적으로 클레임에 대한 1 : 1 핵심 구성 및 권한 부여 "결정"이 없습니다. 또한 일반적인 시나리오에서는 소유권 주장 데이터 만 보유합니다. 나중에 데이터를 사용하여 권한 결정을 기반으로 할 수 있습니다. 그런 다음 권한 부여 관리자는 자체 데이터 관리를 사용하여 해당 사항을 확인합니다.

이제 클라이언트 응용 프로그램이므로 (WPF라는 것을 몰랐습니다) 약간 다르게 작업 할 수 있습니다. 서버 응용 프로그램에서 여러분의 접근 방식은 매우 잘 확장 될 것입니다.