所以我有这个理论上可能有一天会成为付费应用程序的Web应用程序 - 如果有人真的觉得它有用并且值得。何时检查是否应该允许帐户使用Web应用程序?
我有处理付款的所有逻辑,检查帐户是否过期等。它全部存储在RavenDB(实际上是RavenHQ)中 - 并不是说这对于手头的问题应该很重要。
现在,我正在尝试遵循最佳实践,并且我希望我的应用程序具有高性能,即不是微型优化,但我希望以一种可以相对较好地加载的方式来执行操作(如果它启动它将被托管 - 我想不必支付更多的服务器而不是绝对必要的)。
我的应用使用的东西接近默认的登录/帐户模型。用户通过https使用表单身份验证安全地登录。
在什么时候应该检查用户是否真的被允许(关于付款状态等问题 - 一个真正的领域模型问题)使用Web应用程序?考虑到这将意味着从RavenDB后端请求单个文档并检查当前付款期限是否已过期。
我应该:
检查每一个用户登录的时间,使他们无法“记住我”超过X小时,其中x是一个相对较小的数字吗?
检查用户经常访问的一些中央控制器操作 - 如果这些操作不可用,应用程序将基本上受到严格限制。
做一个全局动作过滤器来检查每一个请求,然后重定向到“Pay nooooow!”页面尽快过期?
另一种选择?
RavenDB确实聪明缓存,所以我不认为这个文件将杀死性能的要求,而是应该应用真正起飞(不太可能,但一个可以梦想),每http请求额外的数据库请求可能会导致艾恩德狩猎我,无情地击败我。我不想那样。
在我看来,这是别人会想到并解决的问题,所以我问 - 什么才是正确的方法来处理这个问题?
感谢您的任何见解!
嗨,谢谢你的回复。我理解并同意你的意见,但是,我之后(我可能对此没有足够清楚)基本上是如何(技术上)在MVC中实现检查。该应用程序将是一个付费应用程序,并且当付款已过期时,我需要提醒用户,除非他们付费,否则他们不能再使用该应用程序。我当然不希望成为一个$$,但我需要一些方法来拒绝访问用户不再允许使用的资源。开始倾向于全局属性和会话变量,methinks .. –
您可以在操作上使用自定义属性,也可以使用基于角色的安全属性。例如:[Role =“PayingCustomer”](不是确切的属性),您可以通过后端检查客户是否确实仍然是付费客户。 –