User.IsInRole()不一致的行为

时间:2013-08-19 14:52:58

标签: asp.net authentication role

我有一个MVC4网站,并且最近注意到一些关于角色的意外行为,我肯定是我误解或忽略了但是我不能看到问题,所以这里就是这样;

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

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

尽管我怀疑我应该使用授权机制,但是有人可以看到为什么当我稍后检查User.IsInRole()时它会超时试图命中SqlServer,大概是因为它认为它充当了RoleProvider(它没有在config中设置) ),为什么不只是从Global.asax中指定的当前用户获取它?

TIA, 担

[从我的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;
            }
        }

1 个答案:

答案 0 :(得分:0)

好的,所以我将用户角色设置在生命周期中的错误点,并且它们被覆盖,将代码逐字地移动到此事件以确保它不会被覆盖。

Application_PostAuthenticateRequest(Object sender, EventArgs e)