2017-12-12 5 views
2

웹 응용 프로그램에 대한 사용자 지정 사용자 저장소를 구현했습니다. 지금까지 모든 것이 잘 작동합니다. 이제 역할을 지원하기 위해 저장소 클래스를 확장하려고했습니다. 다음과 같이 Owin AppBuilder과 서비스를ASP.MVC IUserRoleStore <>가 전혀 호출되지 않았습니다.

IUserStore<UserViewModel>, IUserLockoutStore<UserViewModel, string>, IUserPasswordStore<UserViewModel, string>, IUserTwoFactorStore<UserViewModel, string>, IUserRoleStore<UserViewModel, string>, IRoleStore<RoleModel, string> 

그리고 등록 :

var ctx = UnityMvcActivator.Context.Container; 
app.CreatePerOwinContext(() => ctx.Resolve<WebUserManager>()); 
app.CreatePerOwinContext(() => ctx.Resolve<RoleManager>()); 
app.CreatePerOwinContext(() => ctx.Resolve<WebApplicationUserStore>()); 

내가 User.IsInRole(Constants.Roles.COMPANY_OWNER)을 내 컨트롤러로 돌아가서 호출하는 경우 상점이를 얻기 위해 호출되지 않습니다 나는 다음과 같은 인터페이스를 구현 사용자의 역할 누락 된 링크가있는 것 같지만 찾을 수 없습니다. 또한 SupportsUserRole 속성을 true로 설정하고 UserManager<UserViewModel, string>을 구현했습니다. 차이는 전혀 없습니다.

답변

1

User.IsInRole은 데이터베이스를 확인하지 않고 현재 사용자 쿠키 만 검사합니다. 그것은 당신에게 쿠키에 저장되어있는 역할을 얻을 것이다. 그러나 이것들은 데이터베이스에서 가지고있는 역할과 다를 수있다. 마지막으로 쿠키를 새로 고친 이후 사용자 역할이 변경되면 차이가 발생할 수 있습니다.

데이터베이스 사용 UserManager.IsInRoleAsync (MSDN)

+0

솔루션은 User.IsInRole 잘 동작에 역할을 확인해야하지만, AuthorizeAttibute가 작동하지 않습니다. 모든 요청을 필터링하고 로그인 페이지로 리디렉션합니다. –