ASP.NET MVC多租户应用程序问题

3
我们目前正在开发一个asp.net mvc3 (aspx)的多租户网站。我们在web.config中创建了一个租户配置部分,其结构如下:
<tenants>
  <tenant name="client1" baseUrl="client1.domain.com">
    <settings>
      <setting name="siteName" value="client 1 site">
    </settings>
  </tenant>
  <tenant name="client2" baseUrl="client2.domain.com">
    <settings>
      <setting name="siteName" value="client 2 site">
    </settings>
  </tenant>
</tenants>

在我们的代码中,我们有一个租户生成器,可以从ITenant接口创建具体类。一旦我们能够解决问题,每个租户的网站都可以正常运行。然而,我不太满意我们正在做的两件事情。同时请注意,虽然我们正在进行依赖注入,但我们没有使用第三方IOC容器(所有DI都是自定义的)。
1. 控制器操作覆盖-目前我们在租户中有一些方法作为控制器操作覆盖(返回ActionResult),这些方法在实际控制器操作中被调用。例如-如果我们需要针对Home/Index的特定于租户的逻辑,我们会这样做:return currentTenant.HomeIndex()。是否可以使用ControllerFactory或ServiceLocator来替代这种方式?如果可以,有人能解释一下最好的方法吗?
2. 访问-现在我们的两个租户相当于以下内容:client1=免费用户,client2=付费用户。虽然我们使用MembershipProvider来授权用户,但我们创建了一个ActionFilter来检查用户类型/级别并继续或重定向到适当的站点。有更聪明的方法来进行这些检查吗?
提前感谢。
1个回答

0

对于第一部分,您可以在操作声明中添加一个额外的变量,例如:

public ActionResult Index(Itenant tenant)

而不是返回 currentTenant.HomeIndex(),你可以这样做

return Action("Index", new { tenant = currentTenant});

第一部分,这将自动工作。 (或者,如果您感到特别冒险,可以跳过新的{tenant..}部分,并使用自定义模型绑定器!)

第二部分,这实际上是更聪明的方法。 如果您想要具有重定向的自定义安全许可,请实现自定义过滤器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接