2012-12-10 2 views
3

일부 역할 기반 종속성 (Ioc, Ninject)을 설정하고 싶습니다. 그러나 로그인이 성공하면 사용자의 역할을 알 수 없습니다. 주입을 언제 어디에서 적용해야합니까? 역할을 강제로 초기화 할 수 있습니까? 아니면 직접 가져와야합니까? applicatin는 HomeContoller (아무 역할 세트)로 시작MVC 4에서 역할은 언제 초기화됩니까? 로그인 성공 후 아니요

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) 
     { 
      DoRolebasedObjectBinding(model.UserName); // THIS IS THE WRONG PLACE! 
      return RedirectToLocal(returnUrl); 
     } 

     // If we got this far, something failed, redisplay form 
     ModelState.AddModelError("", "The user name or password provided is incorrect."); 
     return View(model); 
    } 

가의 성공적인 로그인 후 appllication이 HomeController을 해제로 리디렉션됩니다 하나의 트릭이다 (위의 표준 코드 참조) 이제 역할 설정 강제 역할은 모든 역할 또는 addtional "일반적인"역할

public class HomeController : Controller 
{ 
    [Authorize(Roles = "Common")] 
    public ActionResult Index() 
    { 
     DoRolebasedObjectBinding(User.Identity.Name); 

을 추가하여 HomeController에서 초기화 할 그러나 이것은 또한 시작 지점으로 HomeController를 강제로 로그인을 강제로. 다행히도 DoRolebasedObjectBinding을 호출하는 "우아한"장소입니다.

+2

을 당신이 원하는 일에 대해 더 구체적으로 할 수 있습니다 그것을 스스로 할 ? –

+1

이름을 기반으로 : WebSecurity.Login, 당신은 자신의 유효성 검사를하고있는 것 같습니다 그리고 회원 공급자를 사용하지 않습니다. 이 경우 각 요청에 대해 인증 된 사용자의 역할을 로딩해야합니다. 지금 가지고있는 방식대로 DoRolebasedObjectBinding()은 쿠키를 설정하고 역할을 읽고 채워야합니다 (ID 및 주체 만들기) –

+0

개체 삽입은 로그인 한 사용자의 역할을 기반으로합니다. 역할은 로그인 이후에 설정되지만 예상 한 순간에 설정되지 않습니다 (성공적인 로그인 직후). – Gerard

답변