2011-10-28 1 views
3

Nous développons actuellement un site Web multi-locataires asp.net mvc3 (aspx). Nous avons créé une section de configuration du locataire dans notre web.config w/la structure suivante:ASP.NET MVC Multi locataires Questions d'application

<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> 

Et dans notre code, nous avons plus ou moins un constructeur de locataire qui crée des classes concrètes de notre interface ITenant.

Tout fonctionne bien rendant notre site par locataire une fois que nous sommes en mesure de le résoudre. Cependant, je ne me sens pas à l'aise comme on fait deux choses. Notez également que pendant que nous effectuons l'injection de dépendances, nous n'utilisons pas de conteneur IOC tiers (toutes les DI sont personnalisées en ce moment).

  1. l'action du contrôleur - actuellement nous overrides ont des méthodes de nos locataires qui agissent comme des remplacements d'action du contrôleur (retourne un ActionResult) qui sont appelés à l'action du contrôleur réelle. Par exemple - Si nous avions besoin d'une logique spécifique au client pour Home/Index, nous ferions quelque chose comme ceci: return currentTenant.HomeIndex(). Plutôt que de le faire de cette façon, puis-je utiliser un ControllerFactory ou le ServiceLocator? Si oui, quelqu'un peut-il expliquer la meilleure façon de s'y prendre?

  2. Accès - nos deux locataires sont actuellement les suivants: client1 = utilisateur libre, client2 = utilisateur payant. Bien que nous utilisions un MembershipProvider pour autoriser les utilisateurs, nous avons créé un ActionFilter qui vérifie le type/niveau d'utilisateur et continue ou redirige vers le site approprié. Y a-t-il une façon plus intelligente de faire ces vérifications?

Merci d'avance.

Répondre

0

Pour la première partie, vous pouvez avoir une variable supplémentaire à la déclaration d'action, à savoir:

public ActionResult Index(Itenant tenant) 

et au lieu de vous pourriez faire

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

currentTenant.HomeIndex de retour(), qui fonctionne automagiquement. (Ou vous pouvez ignorer la nouvelle partie {locataire ..}, et utiliser un classeur de modèle personnalisé si vous vous sentez plus aventureux!)

Deuxième partie, c'est en fait la façon la plus intelligente. Si vous souhaitez une autorisation de sécurité personnalisée avec redirection, vous devez implémenter un filtre personnalisé.

Questions connexes