2013-08-19 2 views
1

MVC4 사이트가 있고 역할에 대한 예기치 않은 동작을 최근에 알아 챘습니다. 확실히 오해되거나 간과되었지만 아직 여기에서 문제를 볼 수 없습니다.User.IsInRole()의 일관성없는 동작

로그인시 Userdata에 역할 정보를 포함하는 authticket을 만듭니다.

Application_AuthenticateRequest에서 역할 데이터를 검색하여이를 CurrentUser에 할당합니다.

Authorize 메커니즘을 사용해야하는 것으로 생각되지만, 나중에 User.IsInRole()을 확인하면 SqlServer를 히트하려고 시도하는 이유를 알 수 있습니다. 이유는 RoleProvider 역할을하고 있다고 생각하기 때문입니다. config)에서 Global.asax에 할당 된대로 현재 사용자로부터 가져 오는 것이 아닌 이유는 무엇입니까?

TIA, 단

try 
     { 
      if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated) 
      { 
       var currentUser = HttpContext.Current.User; 
       var formsId = currentUser.Identity as FormsIdentity; 
       var ticket = formsId.Ticket; 
       string userData = ticket.UserData; 

       var rolesString = userData.GetValueFromKeyValuePairs<string>("roles", "|"); 
       var rolesList = rolesString.SplitAndType<string>("|").Select(s => s.ToLower().Replace(" ", "")); 

       if (rolesList.Count() > 0) 
       { 
        HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(ticket.Name), rolesList.ToArray()); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      if (Debugger.IsAttached) 
      { 
       throw ex; 
      } 
     } 

답변

0

확인 [내를 Application_AuthenticateRequest에서 냈다, 그래서 수명주기의 잘못된 지점에서 사용자의 역할을 설정했다 그리고 그들은 코드를 이동, 덮어 쓰기되고 있었다 이 이벤트에 대해 축 어적으로 덮어 쓰지 않도록합니다.

Application_PostAuthenticateRequest(Object sender, EventArgs e) 
관련 문제