2010-04-07 7 views
2

Quelle est la meilleure façon de vérifier si un utilisateur dispose des droits appropriés pour exécuter une action?Meilleures pratiques pour limiter les vues par rôle dans MVC2

J'ai un couple dans façons mon esprit, certains que je l'aime plus que d'autres:

1) Utilisez l'attribut PrincipalPermission qui est simple et très faible sur LOC écrite. La principale est qu'il nécessite une version de code (et des tests) pour apporter des modifications à la sécurité.

2) Utilisez l'attribut Authorize qui semble être fondamentalement le même (au moins dans ce cas) que l'attribut PrincipalPermission.

3) Utilisez un attribut personnalisé (tel que discuté here) et lisez la configuration à partir de fichiers web.config à la page ASP.NET classique. Cela a l'avantage d'être flexible, mais je n'aime pas la quantité de code que je devrais générer pour lire dans la configuration.

4) Utilisez un attribut personnalisé et lisez les informations de rôle de la base de données. Similaire à l'option précédente, mais à partir d'une base de données. Je suis plus enclin à aller dans cette voie car cela donne la plus grande flexibilité aux utilisateurs, mais il faut aussi que je désigne au moins une personne pour changer les permissions. Cela peut être rendu difficile/ennuyeux lors de l'utilisation de l'usurpation d'identité, car le "admin" peut ne pas exister dans le futur.

5) Utilisez la méthode web.config ou db, mais plutôt qu'au niveau de l'attribut, créez une méthode de base dans une classe de contrôleur de base qui permet de vérifier facilement les rôles. Cela produit du code supplémentaire dans chaque méthode d'action, et n'a vraiment pas d'autre avantage que d'éviter la méthode OnActionExecuted (à des fins de recouvrement).

6) Quelque chose d'autre que j'ai manqué ...

Alors quelle option est la meilleure? Quelque chose à retenir ici est que, au moins dans mon cas, apporter des modifications au code nécessite de tester qui peut être un processus long et étiré. Etre capable d'éviter de reconstruire le code me semble être un avantage majeur, même si je suppose que cela sert un but même avec des changements de sécurité.

(BTW, je vois un bouton communauté wiki et un avertissement au sujet de la subjectivité, mais je ne sais pas si je devrais vérifier cela ou quoi.)

Répondre

1

J'ai choisi le Autorisez Attribut méthode :) the method décrit par tvanfosson .

+0

Y avait-il une raison pour laquelle vous êtes allé avec cette méthode au lieu d'une autre façon? – Krisc

+0

Je suis allé cette route en raison du fait que l'attribut Autoriser avait déjà fait un certain code de plomberie et que je n'aurais qu'à le prolonger. L'attribut [Authorize] ne dépend d'aucun mécanisme spécifique d'identité d'utilisateur ou de gestion de rôle. Au lieu de cela, il fonctionne contre l'objet ASP.NET "User" - qui est extensible et permet à n'importe quel système d'identité d'être utilisé. –

Questions connexes