2010-03-31 206 views
2

我正在研究一个小MVC框架,我想知道什么“最好的方法”是结构的东西,所以安全页面/控制器始终确保用户登录(并因此自动重定向到登录页面 - 否则 - 如果不是)。显然,有很多方法可以做到这一点,但我想知道什么解决方案是最常见的或被认为是最佳实践。我有一些想法:MVC页面,需要用户登录

  • 在您的控制器操作方法的开始时显式调用user->isLoggedIn()? (看起来太容易忘记,并且在事故中留下一个不安全的重要页面)
  • 让你的控制器扩展一个secureController,它总是检查构造函数中的登录吗?
  • 当请求安全信息时,是否在模型中检查? (看起来好像会产生多余的电话)
  • 完全是另一回事吗?

注意:我在使用PHP,但问题不是语言相关的。

回答

5

ASP.Net MVC做到这一点很好地与控制器类的[授权]属性,它需要授权

+0

这也可以应用在每个动作的基础上。 – mxmissile 2010-03-31 21:35:38

1

这是不这样做的唯一途径,但...

所有客户机请求去一个FilterManager,它根据请求的细节构建一个FilterChain。在FilterChain中,如果资源是需要登录状态的资源,并且客户端未登录,则可以重定向该请求。原始请求可以保存并重定向到登录页面,允许从原始请求继续(这是可选的)。

这是一个J2EE设计模式,但是一旦你明白了,你可以用任何语言来实现它。在这种情况下,其中一个“过滤器”是“认证过滤器”。请参阅http://java.sun.com/blueprints/corej2eepatterns/Patterns/InterceptingFilter.html了解这个想法的细节(用Java)。

这样做的好处是,所有页面将在FilterManager中集中它们的逻辑,因此一个页面只需要调用FilterManager。此外,您可以添加调试过滤器/日志过滤器/等,这可以帮助维护/开发您的代码。

+0

我很喜欢这个想法。在这一点上,我想把它放到我的(非常小的)框架中,但我一定会仔细研究它。 – keithjgrant 2010-04-01 15:49:06

相关问题