MVC4 사이트가 있고 역할에 대한 예기치 않은 동작을 최근에 알아 챘습니다. 확실히 오해되거나 간과되었지만 아직 여기에서 문제를 볼 수 없습니다.User.IsInRole()의 일관성없는 동작
로그인시 Userdata에 역할 정보를 포함하는 authticket을 만듭니다.
Application_AuthenticateRequest에서 역할 데이터를 검색하여이를 CurrentUser에 할당합니다.
Authorize 메커니즘을 사용해야하는 것으로 생각되지만, 나중에 User.IsInRole()을 확인하면 SqlServer를 히트하려고 시도하는 이유를 알 수 있습니다. 이유는 RoleProvider 역할을하고 있다고 생각하기 때문입니다. config)에서 Global.asax에 할당 된대로 현재 사용자로부터 가져 오는 것이 아닌 이유는 무엇입니까?
TIA, 단
는
try
{
if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated)
{
var currentUser = HttpContext.Current.User;
var formsId = currentUser.Identity as FormsIdentity;
var ticket = formsId.Ticket;
string userData = ticket.UserData;
var rolesString = userData.GetValueFromKeyValuePairs<string>("roles", "|");
var rolesList = rolesString.SplitAndType<string>("|").Select(s => s.ToLower().Replace(" ", ""));
if (rolesList.Count() > 0)
{
HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(ticket.Name), rolesList.ToArray());
}
}
}
catch (Exception ex)
{
if (Debugger.IsAttached)
{
throw ex;
}
}