2010-09-25 4 views
1

Je suis un peu nouveau à ASP.NET MVC et j'ai un peu d'une épreuve. Je développe un site web avec plusieurs rôles et bien sûr la logique et l'interface utilisateur que l'utilisateur obtient dépend du rôle (duh).Comment placer la logique pour plusieurs rôles différents dans ASP.net MVC 2

Il existe 10 rôles distincts dans cette application. Ils partagent la plupart des mêmes fonctionnalités, mais certains écrans seront différents selon les rôles dans lesquels ils se trouvent.

Voici ma question. Tous les exemples et tutoriels que j'ai lus sur Internet et le livre Apress que j'ai lu montrent comment implémenter des rôles avec un rôle (Admin) dans lequel la manière habituelle est de fournir un contrôleur d'administration (ou même une zone d'administration) pour la section autorisée du site. Cependant, que se passe-t-il s'il y a 10 rôles? Ai-je vraiment besoin de coder 10 contrôleurs séparés? Permettez-moi d'aider la question en donnant des détails sur ce qui est en train de se développer. Il y aura un menu et les éléments du menu seront filtrés par rôle de ce que les vues (ou pages) qu'ils peuvent et ne peuvent pas obtenir. De ce qu'ils choisissent, il leur fournira une vue restreinte (ou une page autorisée) qui de l'intérieur fournira une pléthore de fonctionnalités limitées à ce rôle.

Je sais qu'il y a plusieurs façons de le faire, je veux juste savoir ce qui est recommandé ou "propre".

Avez-vous déjà été dans cette situation et si oui, comment avez-vous organisé la logique pour plusieurs rôles? Séparer tous les rôles pour séparer les contrôleurs? Avoir quelques contrôleurs, mais juste appliquer le filtrage d'autorisation sur les méthodes d'action? Appliquer le filtrage de rôle dans les vues ou les vues partielles et laisser les contrôleurs seuls?

Malheureusement, il y a peu de ressources pour implémenter plusieurs rôles, je veux juste savoir comment le faire de façon "correcte" en termes de séparation de la logique.

Répondre

0

Je mettrais les éléments de fonctionnalité dans les vues partielles. Avoir un contrôleur par morceau de site Web et charger des vues partielles basées sur le rôle et ce qui devrait être exposé.

Je m'en écarterais seulement si vous avez un nombre excessif de différences, comme aurait pu le faire un administrateur. Ensuite, je fais généralement une zone pour encapsuler cette fonctionnalité. Indépendamment de la séparation du contrôleur, j'utiliserais certainement des vues partielles pour minimiser la duplication de code similaire. Vous récolterez les bénéfices lorsque vous devrez maintenir ce code.

0

Utilisez Autoriser sur les méthodes d'action et appliquez les rôles autorisés pour l'opération.

En fonction de ce qui est approprié pour le scénario, créez une liste des actions disponibles à partir du contrôleur et envoyez-les à la vue en tant que partie du modèle de vue. Dans certains cas, il est plus approprié d'envoyer un modèle de vue plus simple qui indique si chaque opération est autorisée, par exemple CanDelete, CanEdit, CanViewDetailedInfo, etc.

Je commencerais par cela, et en fonction de la complexité réelle à toute combinaison de:

  • Un ActionFilter qui renseigne les actions disponibles/au lieu de faire explicitement dans le contrôleur
  • Utilisez réflecteur pour rechercher la liste des rôles appliqués dans authorize/si vous spécifiez uniquement les rôles une fois
  • Vos propres aides html qui prennent en compte l'autorisation.Ainsi, lorsque vous déclarez un lien d'action, sa seule sortie lorsque l'action est prise en charge.
Questions connexes