2013-08-19 4 views
1

У меня есть сайт MVC4, и я недавно заметил какое-то неожиданное поведение относительно ролей, которое, я уверен, является тем, что я либо неправильно понял, либо пропустил, но я не могу увидеть проблему, но вот здесь;Непоследовательное поведение User.IsInRole()

On Login Я создаю authticket, включая информацию о ролях в Userdata.

В Application_AuthenticateRequest Я извлекаю данные о роли и назначаю их в CurrentUser.

Несмотря на то, что я подозреваю, что должен использовать механизм авторизации, может кто-нибудь понять, почему, когда я позже проверяю User.IsInRole(), он пытается использовать SqlServer, предположительно потому, что считает, что он действует как RoleProvider (его не установлено в config), почему он не просто получает его от текущего пользователя, как назначено в Global.asax?

ТИА, дана

[пропущен из моего Application_AuthenticateRequest]

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

Итак, я устанавливал роль пользователя в неподходящий момент жизненного цикла, и они были перезаписаны, перемещением кода verbatim к этому событию гарантирует, что он не будет перезаписан.

Application_PostAuthenticateRequest(Object sender, EventArgs e) 

 Смежные вопросы

  • Нет связанных вопросов^_^