用户到期时MVC的最佳位置

时间:2010-02-21 23:22:15

标签: c# asp.net-mvc design-patterns

我有一个ASP.NET MVC网络应用程序,它上面有一个非常基本的订阅系统。

我的问题涉及实施订阅结束日期的最佳位置。目前,以下代码驻留在Site.master中:

    if (Profile.expires < DateTime.Today)
    {
        FormsAuthentication.SignOut();
        FormsAuthentication.RedirectToLoginPage();
    }

因此,每当有人点击任何页面时,此代码都会检查用户名是否已过期。

我显然要将此代码移出Site.master页面并移入Model.Helpers(或类似的东西),但是我想知道代码是否应该仍然从其他地方调用(保持在上下文中) MVC模式)。显然我会将代码移出site.master并进入,例如,Model.Helpers.Validate()

从那里开始,正如我所看到的那样,可能性是:

  • 从site.master
  • 调用该方法
  • 在global.asax文件中实现该方法,例如使用路由约束。
  • 通过所有操作的属性以某种方式实现方法(不确定这是否可行或如何操作)

任何人都可以建议哪种方式最好?如果有另一个最接近MVC设计模式的替代方案,请告诉我。我真的很想以'正确'的方式做到这一点:)

2 个答案:

答案 0 :(得分:3)

我通常通过覆盖onAuthorization方法将其放入基本控制器中。

答案 1 :(得分:0)

您还可以在Global.asax文件中使用Application.AuthenticateRequest。此外,将所有授权代码移动到服务(AuthorizationService)中。

var authorizationService = new AuthorizationService(); 

if(authorizationService.IsSubscribtionExpiredForUser(user)) 
{
   // redirect to login page 
}