У меня есть следующий код в контроллере для проверки входа в систему:
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"
Roles.IsUserInRole("admin")
, вполне логично, что у вас всегда есть admin в качестве имени пользователя в вашем методе. Не могли бы вы показать, как вы звонитеGetRolesForUser()
? - person Oliboy50   schedule 06.07.2014