2010-02-12 2 views
2

Par exemple, la façon dont nous le faisons maintenant est comme ainsi: (dans le web.config)Comment implémenter l'autorisation de page dans ASP.NET en utilisant un magasin SQL au lieu de web.config?

<location path="somePath"> 
<system.web> 
    <authorization> 
    <allow roles="approvedRoles"/> 
    <deny users="*"/> 
    </authorization> 
</system.web> 
</location> 

Et ce que je voudrais faire à la place est de stocker quelque part ces informations dans SQL afin que nous peut manipuler l'information plus facilement. Mais nous voulons conserver la même fonctionnalité que celle fournie par web.config, tout comme nous pouvons utiliser un SqlRoleProvider au lieu de rôles en dur dans l'application. Donc, en d'autres termes, si un utilisateur essaie actuellement d'accéder à "somePath" et qu'il ne fait pas partie de "approvedRoles", il est redirigé vers default.aspx, et s'il est membre de "approvedRoles", il obtient le page. Je veux faire la même chose, mais sans utiliser web.config comme mécanisme d'autorisation. Donc, ce que je ne demande PAS, c'est comment définir les rôles, ou comment gérer la connexion à la base de données, mais comment stocker les informations ci-dessus dans SQL au lieu de web.config. En fait, je vais prendre "n'importe où mais web.config" pour le moment.

Des idées? Est-ce possible en utilisant une classe "Provider"? Je cherche juste des indications sur ce qu'il faut hériter et peut-être une documentation technique. À cet égard mon googlefoo manque car je ne sais pas vraiment où pointer. Suis-je vraiment à la recherche d'AzMan? Cette localisation-autorisation-via-SQL est-elle déjà définie dans l'aspnetdb par défaut quelque part et il me manque?

D'ailleurs, cette question a-t-elle déjà été posée sur SO et je l'ai manquée? Que feriez-vous google?

Répondre

2

Vous pouvez écrire votre propre contrôle d'autorisation qui vérifie manuellement les rôles de l'utilisateur actuel et le compare à une liste de pages et à leurs allocations de rôle respectives, puis intégrer ce contrôle dans toutes vos pages.

+0

Ouais, je suis en train d'éviter quelque chose le long de cette veine. Je préférerais même ne pas créer un wrapper pour la page par défaut juste pour l'obtenir car il est évidemment possible de travailler avec la pile auth avant d'arriver à la page. Ajouter quelque chose à chaque page est actuellement hors de question. Ce n'est peut-être pas à l'avenir, mais n'est-il pas plus facile de rediriger avant d'y arriver? – jcolebrand

1

La meilleure chose à faire est de gérer l'événement HttpApplication.AuthorizeRequest. À ce stade, l'objet HttpContext.User est défini et vous pouvez effectuer l'analyse souhaitée, par exemple en vérifiant une table de base de données par rapport à HttpContext.User.IsInRole et au chemin de requête en cours.

+0

Ok, où irais-je faire ça? En global.asax? Dans web.config? Serais-je créer un HttpModule personnalisé pour gérer cela? Avez-vous vu des exemples que vous remarqueriez comme remarquables? – jcolebrand

+0

Dans le code global.asax derrière. Il suffit de créer une méthode comme: private void Application_AuthorizeRequest (expéditeur d'objet, arguments EventArgs) {} –

1

Azman peut avoir une base de données SQL en tant que magasin de données depuis Windows Server 2008 et SQL Server 2008. J'irais avec Azman si je n'ai aucun attachement aux applications héritées qui doivent migrer vers de nouveaux serveurs.

Connect to an SQL-based Authorization Store

+0

Je ne peux pas installer de nouveaux éléments sur les serveurs en dehors d'IIS/SQL et de mon application. Mais merci pour la suggestion! – jcolebrand

Questions connexes