2012-12-14 4 views
0

나는 간단한 사용자 지정 역할 공급자를 사용하려고 여기에서 코드를 사용하고이를 사용하여 구현하는 http://code.google.com/p/sfckopanka/source/browse/trunk/App_Code/OdbcRoleProvider.cs?r=45사용자 정의 롤 공급자가 초기화되었지만 사용되지 않았습니까?

: http://msdn.microsoft.com/en-us/library/tksy7hd7(v=vs.100).aspx

이 Microsoft에서 모든 단순한 상용구 코드입니다.

내 응용 프로그램을 디버깅 할 때 역할 공급자가 초기화되었음을 알 수 있지만 역할을 확인하려고하면 메서드가 호출되지 않습니다.

User.IsInRole("Customer") 

[Authorize(Roles="Customer")] 

또는

나는 나의 역할 공급자의 여러 장소에서 중단 점 넣고 그들은 단지 명중되지 않습니다.

참고 WebAPI를 사용하고 있는데 멤버십 공급자를 사용하지 않고 대신 메시지 처리기를 통해 기본 인증을 사용하고 있습니다.

http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-message-handlers/

베이직 인증

큰 노력하고 있습니다,하지만 난이 호출되는 내 역할 공급자를 방해하는 것입니다 있는지 확실하지 않습니다 ma에.

답변

0

이 경우 다른 사람에게 도움이 될 수 있습니다. 위에 링크 된 Basi Auth 코드에는 PrincipalProvider 클래스가 있습니다. 이 클래스에서 당신은 또한 사용자가있는 것으로 역할을 소요 GenericPrincipal를 만들고, 그래서 난 그냥 내 역할이 다른 사람 도움이되기를 바랍니다

 public IPrincipal CreatePrincipal(string username, string password) 
      { 

       if (!MyRepo.Authentication.ValidateUser(username, password)) 
       { 
        return null; 
       } 

       var identity = new GenericIdentity(username); 

       //Code to get my roles from my role provider to use when setting principal 
       string[] roles =Roles.Provider.GetRolesForUser(username); 

       IPrincipal principal = new GenericPrincipal(identity,roles); 

       ShopZioRepo.ClearUserCache(ShopZioGlobal.MyCookies.UserID); 
       var user = ShopZioRepo.GetUserByEmail(username); 
       ShopZioGlobal.MyCookies.UserID = user.SalesRepID; 
       ShopZioGlobal.MyCookies.Username = username; 


       return principal; 
      } 

GenericPrincipal

에 제공하기 위해 얻을 코드 줄을 추가했다.