2011-03-15 81 views
2

IM用户禁止以下:注销禁止用户

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

如果用户当前已登录,他们仍然可以做的事情在网站上,这样我怎么能还其注销?

回答

4

在您的Global.asax你可以做这样的事情..

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

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

    return user.isApproved; 
} 

你可能要考虑某种形式的缓存...

而且顺便说一句,我假设你使用正确的控制器方法上的[授权]属性。

+0

'Global.asax'听起来像是最好的地方,下一个最好的可能是一个主页'page_load'我会想象的。 – 2011-03-15 20:54:54

+0

Upvoted。这基本上是我如何处理相同的问题(虽然我使用MVC3所以它不同),它运作良好。缺点是,如果用户已通过检查数据库被禁用,我确实需要检查每个请求。 我看到你缓存它的唯一方法是,如果你的成员更新方法实际上是更新缓存本身,并且你的授权方法检查了缓存。 – 2011-03-15 20:56:33

+0

我需要缓存什么? – raklos 2011-03-15 22:11:12

1

你想检查pageLoad每个请求的用户状态。如果他们被禁止,你可以简单地response.End()response.Redirect()他们到主页。

+0

不幸的是,AJAX调用可以使这个棘手。 – 2011-03-15 20:51:35

+0

我明白这一点,但response.End()至少会阻止用户检索更多内容。 – 2011-03-15 20:55:13

0

您将不得不验证用户是否被禁止每个请求。您可以使用HttpApplication(Global.asax)或最好使用自定义HttpModule来实现此目的。