2009-10-05 12 views
2

Je travaille sur une application Web ASP.NET. J'ai ce problème bien connu: chaque utilisateur peut appartenir à un ou plusieurs rôles (admin, utilisateurs publics), et chaque rôle peut avoir une ou plusieurs permissions (pouvoir éditer, supprimer, uploader, etc.) et inversement. Je veux faire comme ceci: [http://demo.sitefinity.com/Sitefinity/Admin/Modules.aspx?route=GenericControlPanel.PermissionsView `1].Dans ASP.NET, que faut-il utiliser pour gérer les rôles et les autorisations affectés aux rôles?

Je trouve ces options pour mettre en œuvre cette:

  • utilisant NetSqlAzMan (mais je ne suis pas sûr qu'il fonctionnera avec notre application, que nos utilisateurs ne sont pas stockés dans le même db que l'application, et que nous utilisent des formes d'authentification)
  • mettre en œuvre mes propres classes qui me permettent de le faire: User.HasPermission/AddPermissionToUser/etc
  • avec 2 fournisseurs de rôle: un pour gérer les rôles, l'un pour gérer les autorisations, sachant que ces fournisseurs seront être "lié", en raison de la relation m: n entre les rôles et les permissions.
  • J'utilise actuellement un fournisseur de rôles personnalisé, donc une autre option serait d'ajouter les méthodes pour gérer les autorisations de ce fournisseur.

Je souhaite également mettre en cache les rôles et les autorisations pour un utilisateur donné. Je pense qu'il me faudra du temps pour le faire tout seul, alors que me suggérez-vous?

Merci à l'avance

+0

Première puce - Vous pouvez si vous utilisez des utilisateurs DB. –

Répondre

4

Si vous trouvez une bonne solution packagée pour un module d'autorisations là-bas, je voudrais le voir :)

D'une manière générale, le intégré des fournisseurs de sécurité arrête après la partie "identification" et "autorisation". Une fois identifiées et autorisées à accéder à l'application, des autorisations plus spécifiques au niveau de la page ou de la fonction sont à vous de coder et de gérer vous-même.

Le niveau d'autorisations que vous décrivez est en fait assez avancé à implémenter. Il reflète les listes de contrôle d'accès (ACL) dans Windows. Bien qu'il semble assez simple, il est en fait assez difficile à coder. Une fois que vous avez commencé à le concevoir, vous découvrez que vous devez implémenter une autorisation de remplacement «refuser», devoir gérer les fusions d'autorisations de groupes à plusieurs niveaux, et devoir ensuite gérer des autorisations «spéciales» et autres. Ensuite, vous vous retrouvez dans les trucs comme "les permissions d'édition impliquent-elles aussi la vue, et que dois-je faire si elles n'ont pas de vue mais ont des add"?

Cela peut être un vrai désordre. Avant de mettre en œuvre des autorisations à ce niveau de complexité, je vous recommande vivement de prendre du recul et de voir si vous pouvez aplatir un peu vos autorisations et votre modèle de rôle/groupe. Ne pouvez-vous pas simplement laisser vos rôles être les permissions? Par exemple, un rôle pour les personnes qui peuvent éditer, un rôle pour les personnes qui peuvent ajouter, un rôle pour les personnes qui peuvent afficher ...

Dans la plupart des applications, vous n'avez pas vraiment besoin d'une ACL complète comme la granularité dans le système d'autorisations. Une fois que vous avez défini le niveau approprié d'autorisations dont votre application a réellement besoin, il est généralement préférable de désactiver un ensemble d'objets personnalisés pour gérer ces autorisations. Je dois dire que je n'ai jamais envisagé d'utiliser un second fournisseur de rôle lié comme gestionnaire d'autorisations avant ... c'est une idée plutôt géniale. Mais je conseillerais encore contre.Le fournisseur de rôle n'a pas été conçu pour ce que vous essayez de faire et vous devrez probablement étendre et remplacer le comportement par défaut à tel point qu'il serait plus simple et plus facile d'utiliser simplement une implémentation personnalisée à partir de zéro.

+0

Celui-ci http://www.portsight.com/Products.aspx?AliasPath=Products/Secure%20Access/Secure%20Access&CultureAlias=en-US semble bon, qu'en pensez-vous? – jon

+0

Je n'ai regardé que la documentation de l'application et j'aime l'idée. Le gros problème pour moi, c'est que ça semble être un très vieux produit. J'ai ouvert la nouvelle version et les dates sur la plupart des fichiers sont soit 2004 ou 2006. La documentation est excellente, mais ne parle jamais de plates-formes plus récentes. Il parle de serveur 2003, .NET 2.0 et SQL 2000. Donc, ma grande inquiétude serait que le développement sur le produit soit mort. Sur le côté positif cependant, la dernière version est de cette année, même si les fichiers ne sont pas nouveaux, alors peut-être qu'il n'est pas mort ou est sur le point d'être relancé. –

+0

Merci pour vos commentaires utiles. J'ai fini par faire ma propre implémentation. – jon

2

Voici un outil qui combine authentification + autorisations et rôles + journalisation et d'audit http://visual-guard.com/

L'authentification peut être Windows, dans ce cas, il met en oeuvre l'authentification unique ou un nom d'utilisateur/mot de passe combinaison

2 consoles sont disponibles pour gérer les utilisateurs et les autorisations - L'un est plus orienté développeur et fournit un assistant pour définir l'autorisation sans codage (pour .Net), déploiement et fonctions de version. - L'autre est orienté sur le web, orienté vers les administrateurs non-tech, et se concentre sur les comptes utilisateurs, les groupes et les mapper aux rôles.

Les autorisations peuvent être très à grain fin avec une sorte de conditions (ce formulaire est visible pour le rôle « médecins » 8 heures-11 heures, car il est lié aux médicaments qui doivent être donnés uniquement le matin)

Il était à l'origine seulement orienté .Net, et maintenant ils prennent en charge d'autres technologies comme Java, Delphi C++, essentiellement toute technologie capable d'appeler des services Web.

Questions connexes