2013-11-01 2 views
0

mvc4 asp.net4에서 .net4.5로 내 앱을 업데이트하고 있으며 사용자 역할이 작동하지 않습니다. 현재MVC4 .Net 4.5 사용자 역할 문제

나는 위의 도움으로 현재 사용자에게 역할을 추가하고 컨트롤러에서 사용자 역할을 확인하실 수 있습니다

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
    { 
     HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; 
     if (authCookie != null) 
     { 
      FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
      string[] roles = authTicket.UserData.Split(new Char[] { ',' }); 
      GenericPrincipal userPrincipal = new GenericPrincipal(new GenericIdentity(authTicket.Name), roles); 
      Context.User = userPrincipal; 
//Or 
//HttpContext.Current.User = userPrincipal; 
     } 
    } 

이 코드를 사용하고 [권한 부여 (역할 = "관리자, 고객")] 또는 User.IsInRole ("관리자")

하지만 내 코드가 MVC4 ASP.Net 내가 역할 공급자를 사용하지 않으려는 4.5

에서 작동하지 않습니다. 예를 들어 Roles.CreateRole 또는 Roles.AddUserToRole

사람은 심지어 MVC 4 .NET 4.0에서 문제를 repro 수 있습니다이 감사

답변

0

좀 도와 주시겠습니까. .NET 4.0에서 왜 그렇게 재현되지 않는지 확실하지 않습니다.

Application_AuthenticateRequest에서 주체를 바꾸는 것처럼 보입니다. 교장은 마침내 간단한 멤버쉽 코드로 System.Web.Security.RolePrincipal로 대체 될 것이고 RolePrincipal이 데이터베이스를 쿼리하여 사용자의 역할 데이터를 가져올 것이라고 생각합니다. RoleProvider를 사용하지 않으므로 RolePrincipal에는 역할 데이터가 포함되지 않으며 이전 주체의 역할 데이터를 제거합니다.

간단한 해결 방법 RolePrincipal을 설정 한 후 Application_AuthenticateRequest를 Application_AuthorizeRequest로 변경하는 것이 좋습니다. BTW, HttpContext.User 및 Thread.CurrentPrincipal을 동일한 사용자로 설정해야합니다.

위의 해결 방법이 효과가 있는지 알려 주시기 바랍니다.

+0

안녕하세요, 귀하의 도움에 감사드립니다. 예, 올바른 사용자 역할이 System.Web.Security.RolePrincipal로 대체되었으며 데이터베이스에서 역할을 얻으려고했습니다. –

0

.NET 4.5에서 GenericPrincipal은 이제 System.Security.Claims.ClaimsPrincipal에서 상속받습니다. 이전에 System.Object에서 상속되었습니다.

우리의 응용 프로그램은 이것을 세션 (데이터베이스)에 저장하지만 누락 된 역할과 유사한 문제가 발생했을 때 클레임 내부 구조의 일부를 직렬화 및 비 직렬화하는 것으로 보입니다.