0
제가 만든 간단한 역할 공급자가 있습니다.
LocalBankRoleProvider :사용자 지정 ASP.NET MVC 역할 공급자가 작동하지 않습니다.
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);
}
그리고 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>
위의 기능이 작업의 모든
.질문은 여전히 약자
는 내가 관리 방법에 사용자를 리디렉션하려고하지만 작업 나던 및
어떤 아이디어를 LoginForm로 리디렉션?
이 권한 부여 필터 코드를 게시? –
그래, 내 문제의 해결책을 찾았 어. – stackoverflowusername
도 게시하십시오. –