ASP.NET MVC Multi Tenant Application Вопросы - PullRequest
3 голосов
/ 28 октября 2011

В настоящее время мы разрабатываем мультитенантный веб-сайт 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.

Все работает хорошо, отображая наш сайт на одного арендатора, как только мы сможем решить его.Однако я не чувствую себя комфортно, когда делали две вещи. Также обратите внимание, что во время выполнения Dependency Injection мы не используем сторонний IOC-контейнер (все DI прямо сейчас).

  1. Переопределение действий контроллера - в настоящее времяВ наших клиентах есть несколько методов, которые действуют как переопределения действий контроллера (возвращает ActionResult), которые вызываются в действии контроллера.Например: если бы нам нужна была специфичная для арендатора логика для Home / Index, мы бы сделали что-то вроде этого: вернем currentTenant.HomeIndex (). Вместо того, чтобы делать это таким образом, я могу использовать ControllerFactory или ServiceLocator?Если да, то может ли кто-нибудь объяснить лучший способ сделать это?

  2. Доступ - прямо сейчас наши два арендатора приравниваются к следующему: client1 = бесплатный пользователь, client2 = платный пользователь. Хотя мы используем MembershipProvider для авторизации пользователей, мы создали ActionFilter, который проверяет тип / уровень пользователя и продолжает или перенаправляет на соответствующий сайт.Есть ли более умный способ сделать эти проверки?

Заранее спасибо.

1 Ответ

0 голосов
/ 28 ноября 2011

Для первой части у вас может быть дополнительная переменная в объявлении действия, например:

public ActionResult Index(Itenant tenant)

и вместо return currentTenant.HomeIndex () вы можете сделать

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

, который будет работать автоматически. (Или вы можете пропустить новую часть {tenant ..} и использовать связующее для пользовательской модели, если вам хочется приключений!)

Вторая часть, это на самом деле умнее. Если вы хотите настраиваемое разрешение безопасности с перенаправлением, вам нужно внедрить пользовательский фильтр.

...