I have a simple role provider I created.
LocalBankRoleProvider:
public override bool IsUserInRole(string username, string roleName)
{
var user = _repository.GetUser(username);
var role = _repository.GetRole(roleName);
if (!_repository.UserExists(user))
return false;
if (!_repository.RoleExists(role))
return false;
return user.Role.Name == role.Name;
}
public override string[] GetRolesForUser(string username)
{
var role = _repository.GetRoleForUser(username);
if (!_repository.RoleExists(role))
return new string[] { string.Empty };
return new string[] { role.Name };
}
LocalBankMembershipProvider:
public override bool ValidateUser(string username, string password)
{
if (string.IsNullOrEmpty(password.Trim())
|| string.IsNullOrEmpty(username.Trim()))
return false;
var hash = LocalBankRepository.GetMd5Hash(password);
return _repository.GetAllUsers().Any(user => (user.Name == username.Trim())
&& (user.Password == hash));
}
HomeController:
[Authorize]
public string Public()
{
return "public";
}
[Authorize(Roles = "Guests")]
public string Users()
{
return "users";
}
[Authorize(Roles = "Administrators")]
public string Admin()
{
return "Admin";
}
AccountController:
[HttpGet]
public ActionResult LogOn(string returnUrl)
{
return View();
}
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (_provider.ValidateUser(model.UserName, model.Password))
{
if (_roleProvider.IsUserInRole(model.UserName, "Administrators"))
{
if (!string.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl);
//return RedirectToAction("Index", "Home");
}
}
ModelState.AddModelError("Password", "The user name or password provided is incorrect.");
}
return View(model);
}
Global.asax:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
And WebConfig:
<membership defaultProvider="LocalBankMembershipProvider">
<providers>
<clear />
<add name="LocalBankMembershipProvider" type="WebApplication1.Abstract.LocalBankMembershipProvider" connectionStringName="UsersDbEntities" />
</providers>
</membership>
<roleManager defaultProvider="LocalBankRoleProvider" enabled="true" cacheRolesInCookie="false">
<providers>
<clear />
<add name="LocalBankRoleProvider" type="WebApplication1.Abstract.LocalBankRoleProvider" connectionStringName="UsersDbEntities" />
</providers>
</roleManager>
ALL OF THE ABOVE features work.
Question still stands:
I am trying to redirect the user to the Admin Method,But doesnt working and redirect to LoginForm
Any ideas?