【问题标题】:User.IsInRole() inconsistent behaviourUser.IsInRole() 不一致的行为
【发布时间】:2013-08-21 10:18:02
【问题描述】:

我有一个 MVC4 站点,最近注意到一些关于角色的意外行为,我确定这是我误解或忽视的事情,但我还看不到问题,所以这里是;

在登录时,我会创建一个身份验证票,其中包含 Userdata 中的角色信息。

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

尽管我怀疑我应该使用授权机制,但谁能明白为什么当我稍后检查 User.IsInRole() 时它会超时尝试访问 SqlServer 大概是因为它认为它正在充当 RoleProvider(它未在配置中设置),为什么不只是从 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;
            }
        }

【问题讨论】:

    标签: asp.net authentication role


    【解决方案1】:

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

    Application_PostAuthenticateRequest(Object sender, EventArgs e)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-06
      • 2015-03-20
      • 1970-01-01
      • 2011-03-19
      • 2012-05-15
      • 2014-11-11
      • 2011-03-29
      • 2015-12-15
      相关资源
      最近更新 更多