2013-08-19 35 views
1

我有一个MVC4网站,并且最近注意到了一些有关角色的意外行为,我确定这是我误会或忽略的东西,但是我不能看到问题,所以在这里;User.IsInRole()不一致的行为

关于登录我创建了一个authticket,其中包含Userdata中的角色信息。

在Application_AuthenticateRequest中检索角色数据并将其分配给CurrentUser。

尽管我怀疑我应该使用授权机制,任何人都可以看到为什么当我稍后检查User.IsInRole()时,它试图命中SqlServer大概是因为它认为它充当RoleProvider(它未设置为为什么它不仅仅是从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

OK [从我Application_AuthenticateRequest剪断],所以我在生命周期中的错误点设置用户角色和他们被覆盖,移动代码对此事件逐字记录确保它不被覆盖。

Application_PostAuthenticateRequest(Object sender, EventArgs e)