Roles.GetRolesForUser始终将admin作为用户名

时间:2014-07-06 01:44:53

标签: c# asp.net-mvc-4 admin membership-provider roleprovider

我在控制器中有以下代码用于登录验证:

SecurityProvider securityProvider = new SecurityProvider();
if (securityProvider.ValidateUser(UserName, Password))
{
    FormsAuthentication.SetAuthCookie(UserName.ToString(), false);
    if (Roles.IsUserInRole("admin"))
    {
        return RedirectToAction("Dashboard", "Admin");
    }
    else
    {
        return RedirectToAction("Dashboard", "User");
    }
}

我有自定义成员资格提供程序和角色提供程序类。因此,在Roles.IsUserInRole("admin")

中调用以下方法
public override string[] GetRolesForUser(string username)
{
    List<string> currentUserRoles = new List<string>();
    using (myDBEntities db = new myDBEntities())
    {
        currentUserRoles.Add(db.Users.First(m => m.UserName == username).Role);
    }
    return currentUserRoles.ToArray();
}

但无论我尝试使用哪个用户名,此方法的用户名都是“admin”。在项目中没有明确将用户名设置为“admin”的痕迹。我错过了什么吗?

编辑:

User.Identity.Name始终返回“admin”

1 个答案:

答案 0 :(得分:0)

你应该在Roles中调用重载方法:

Roles.IsUserInRole(userName, roleName);

看到差异,我们在这里传递userName。这将最终传递给您的GetRolesForUser方法。我认为它会解决你的问题。