Roles.GetRolesForUser всегда принимает admin как имя пользователя

У меня есть следующий код в контроллере для проверки входа в систему:

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"


person Krishna Sarma    schedule 06.07.2014    source источник
comment
гул, если вы всегда проверяете с Roles.IsUserInRole("admin"), вполне логично, что у вас всегда есть admin в качестве имени пользователя в вашем методе. Не могли бы вы показать, как вы звоните GetRolesForUser()?   -  person Oliboy50    schedule 06.07.2014
comment
Я не вызываю метод GetRolesForUser явно. Но когда я отлаживаю Roles.IsUserInRole (admin), это приводит меня к методу GetRolesForUser.   -  person Krishna Sarma    schedule 06.07.2014
comment
@KrishnaSarma - вместо этого используйте Roles.IsUserInRole (userName, roleName). См. Мой ответ ниже для получения дополнительной информации.   -  person SBirthare    schedule 01.08.2014


Ответы (1)


Вы должны вызывать следующий перегруженный метод в Roles:

Roles.IsUserInRole(userName, roleName);

Посмотрите на разницу, здесь мы передаем userName. И это в конечном итоге будет передано вашему GetRolesForUser методу. Думаю, это решит вашу проблему.

person SBirthare    schedule 01.08.2014