2013-08-19 34 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)