2011-03-15 4 views
2

메신저 금지 사용자 사용하여 다음 : 사용자는 현재 그들은 여전히 ​​사이트에 일을 할 수에 기록됩니다, 그래서도를 로그 오프 할 수있는 방법로그 아웃 차단 된 사용자

MembershipUser user = Membership.GetUser(username); 
if (user != null) 
{ 
    user.IsApproved = false; 
    user.LastLoginDate = DateTime.Now; 
    Membership.UpdateUser(user); 
} 

경우?

답변

4

당신은 ...

Application_OnAuthenticateReuqest(object sender, EventArgs e) 
{ 
    if(!UserHasAccess()) 
    { 
    FormsAuthentication.SignOut(); 
    } 
} 

private bool UserHasAccess() 
{ 
    var user = Membership.GetUser(Context.User.Identity); 

    return user.isApproved; 
} 

당신은 캐싱의 몇 가지 형태를 고려할 수 있습니다 ..

을 같은 것을 할 수 있습니다 그리고 BTW 난 당신이 적절한 사용하는 가정입니다 [Authorize] 컨트롤러 메소드의 속성.

+0

'Global.asax'는 이것을위한 최고의 장소처럼 들리 겠지만, 차선책은 아마도 내가 상상할 수있는 마스터 페이지'page_load' 일 것입니다. –

+0

Upvoted. 이것은 기본적으로 동일한 문제를 처리하는 방법입니다 (비록 MVC3을 사용하고 있지만 다른 점). 단점은 사용자가 데이터베이스를 검사하여 사용 중지 된 경우 모든 요청을 확인해야한다는 것입니다. 회원 업데이트 방법이 실제로 캐시 자체를 업데이트하고 권한 부여 방법이 캐시를 확인한 경우 캐싱하는 것이 유일한 방법입니다. –

+0

무엇이 캐시해야합니까? – raklos

1

모든 요청의 pageLoad에서 사용자의 상태를 확인하고 싶습니다. 그들이 금지되면 당신은 단순히 response.End() 또는 response.Redirect() 홈 페이지로 그들을 수 있습니다. 당신의 Global.asax에

+0

AJAX 호출은 불행하게도이 방법을 어렵게 만들 수 있습니다. –

+0

이 내용을 이해하지만 response.End()는 사용자가 더 이상 콘텐츠를 검색하지 못하도록합니다. –

0

모든 요청에 ​​대해 사용자가 금지되었는지 여부를 확인해야합니다. HttpApplication (Global.asax)을 사용하거나 바람직하게는 사용자 정의 HttpModule을 사용하여이 작업을 수행 할 수 있습니다.