ASP.NET MVC Multi Tenant Application Questions

В даний час ми розробляємо веб-сайт з декількома орендарями asp.net mvc3 (aspx). Ми створили розділ конфігурації орендаря в нашому web.config з наступною структурою:


  
    
      
    
  
  
    
      
    
  

І в нашому коді ми маємо більш-менш будівельника-орендаря, який створює конкретні заняття з нашого інтерфейсу ITenant.

Все добре працює, коли ми можемо її вирішити на одного орендаря. Однак я не відчуваю себе комфортно, як робили дві речі. Також зауважте, коли ми робимо ін'єкцію залежностей, ми не використовуємо контейнер МОК третьої сторони (все DI зараз є спеціальним).

  1. Контрольне дію перевизначає - в даний час у наших арендаторів існують деякі методи, які діють як переоцінка дій контролера (повертає ActionResult), які називаються у фактичній дії контролера. Наприклад - якщо нам потрібна конкретна логіка орендаря для Home/Index, ми зробимо щось подібне: return currentTenant.HomeIndex (). Замість того, щоб це робити таким чином, чи можна використовувати ControllerFactory або ServiceLocator? Якщо хтось може пояснити найкращий спосіб це зробити?

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

Заздалегідь спасибі.

3

1 Відповіді

Для першої частини ви можете мати додаткову змінну у декларації дії, тобто:

public ActionResult Index(Itenant tenant)

і замість того, щоб повернути currentTenant.HomeIndex (), ви могли б зробити

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

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

Друга частина, це насправді розумніший спосіб. Якщо ви хочете користуватися клієнтом безпеки за допомогою перенаправлення, вам потрібно буде застосувати власний фільтр.

0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug