2010-06-28 8 views
0

, 나는이 같은 코드를 가지고에서 IsInRole로에 문제가있는 것 : 나는 디버거에서이 단계별 때사용자 정의 권한 부여() 내 AccountController에서

ControllerContext.HttpContext.User = new MyAppUserPrincipal(user); 

나는 ControllerContext.HttpContext.User 것을 볼 수 있습니다. IsInRole ("Admin")이 true입니다.

다음으로, 사용자 정의 속성에 의해 보호 HomeController 있습니다 : 속성의 정의에서

[AuthorizeMyApp(Roles = "Admin")] 

을,이 있습니다

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    var principal = filterContext.HttpContext.User ; 
    if (! principal.IsInRole(_roles)) 

다음

이상한거야 로그인 한 후 집에 가려고 시도한 후 :

principal.Identity.Name has 예상 된 이름 및 IsAuthenticate가 참입니다. 그러나 a) principal.IsInRole ("Admin")이 거짓 임 b) (Principal As MyAppUserPrincipal)이 null입니다.

여기에 뭔가 잘못입니까? (MVC2 사용)

답변

0

나는 MVC2를 처음 사용하지만 칩을 넣을 수 있다고 생각합니다. AuthorizeCore(HttpContextBase httpContext) 메서드에서 실제 승인을 수행하지 않았기 때문일 수 있습니까? 로그온이 쿠키를 설정하는 것이 아니라 로그온 후 리디렉션 (의한 권한 부여가 발광 특성) :

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     return httpContext.User.IsInRole("Admin"); 
    } 
} 
0

대답을 주셔서 감사합니다,하지만 진실은 두 개의 별도의 요청이 진행가 있다고 밝혀졌다 별도의 요청이었다. 다른 ASP.NET 응용 프로그램과 마찬가지로 사용자 지정 사용자를 컨텍스트에 넣을 수있는 곳은 global.asax의 Application_BeginRequest입니다. 내 MVC 기술 수준에 대한 자신감 부족은 내가 어떻게해야하는지 이미 알았던 것에 눈을 멀게했다. 불편을 끼쳐 드려 죄송합니다.이 답변으로 도움이되기를 바랍니다.

관련 문제