2010-04-29 5 views
8

Est-il possible de spécifier que plusieurs rôles sont requis dans l'élément d'autorisation du fichier web.config? J'ai actuellement ce bloc dans un web.config de mon site pour un répertoire spécifique:Exiger plusieurs rôles dans l'autorisation Web.config

<authorization> 
    <allow roles="Global, Region" /> 
    <deny users="*" /> 
</authorization> 

Je viens identifié un cas particulier où une personne avec deux autorisations de niveau inférieur que mondial et de la région devrait également avoir accès dans ce répertoire. En gros, je veux quelque chose comme ceci:

<authorization> 
    <allow roles="GlobalManager, RegionManager, SiteManager && FooSite" /> 
    <deny users="*" /> 
</authorization> 

Des idées? Je me rends compte que je devrais probablement avoir un nouveau rôle pour ce scénario, mais je voudrais éviter cela. Merci!

+0

Malheureusement, je ne pense pas que ce soit possible. J'essaie de faire la même chose avec un . :-( – Pandincus

Répondre

3

Je ne pense pas que vous pouvez le faire via les configurations actuelles autorisées dans web.config. Qu'est-ce que vous pourriez faire si quelque chose comme ce qui suit ... comme la première ligne de votre événement Page_Load pour la page en question, utilisez le code suivant (VB):

If Not (User.IsInRole("Role1") AndAlso User.IsInRole("Role2")) Then _ 
    FormsAuthentication.RedirectToLoginPage() 

Cette ligne est bien sûr en supposant que vous utilisez FormsAuthentication. Si ce n'est pas le cas, vous devrez remplacer FormsAuthentication.RedirectToLoginPage() par le code approprié en fonction de votre méthode d'authentification.

Je ne sais pas exactement à votre situation, mais en fonction de votre code, il semble que vous pourriez aller un peu plus loin, et ajouter une table avec une cartographie des utilisateurs vers des sites, et faire quelque chose comme ce qui suit:

Dans un module publique, ajoutez le code suivant:

<System.Runtime.CompilerServices.Extension()> _ 
Public Function ManagesSite(target As System.Security.Principal.IPrincipal, siteName As String) As Boolean 
    Return [ code here to look up whether this user can access the site specified ] 
End Function 

Ensuite, vous pouvez écrire le code précédent comme quelque chose de plus logique, comme:

If Not (User.IsInRole("SiteManager") AndAlso User.ManagesSite(Request.Url.Host)) Then _ 
    FormsAuthentication.RedirectToLoginPage() 
3

la méthode que je généralement utiliser pour résoudre ce problème lors de la définition des rôles utilisateur, créer des rôles virtuels. Par conséquent, si vous souhaitez autoriser uniquement les administrateurs étudiants à accéder à une page si un utilisateur possède des rôles Étudiant et Administrateur, vous pouvez ajouter un nouveau rôle StudentAdministrator.

+0

J'aimerais que vous sachiez comment vous implémenteriez ceci. –

Questions connexes