2010-12-10 51 views
5

Je travaille sur l'application Asp.net où j'ai 4 rôles dans mon application. 1. Admin 2. Utilisateur 3. Revendeur 4. Affilié. Et j'utilise l'authentification par formulaire pour que tout fonctionne correctement pour un seul rôle (utilisateur). Mais maintenant j'ai 4 rôles et je ne comprends pas comment gérer ça. J'ai 4 dossiers pour différents utilisateurs. Si je me connecte avec un compte revendeur et si je change l'url pour l'utilisateur, alors il me permet d'accéder à la partie utilisateur aussi. Mais je ne veux pas ça. J'ai besoin dans mon application que l'utilisateur peut accéder uniquement à sa zone d'accès. Moyens Si votre revendeur s'est connecté, il ne peut accéder qu'aux pages revendeur ou au même dossier.Authentification par formulaire de Asp.net

S'il vous plaît aidez-moi à trouver cette solution.

Répondre

0

Vous devez définir les paramètres d'authentification appropriés dans un fichier web.config pour chaque dossier que vous limitez l'accès, à savoir

<authorization> 
    <deny users="?" /> 
    <allow roles="Administrators" /> 
    <deny users="*" /> 
</authorization> 

permettront l'accès uniquement aux utilisateurs validés avec le rôle des « administrateurs ».

+0

Vous n'avez pas besoin des utilisateurs Deny Anonymous. Vous n'avez besoin que des rôles Autoriser et Refuser tout. – Phill

+0

Vrai mais ne raccourcit pas un peu la validation, pourquoi tenter une recherche de rôle sur un utilisateur anonyme. – Lazarus

+0

Juste curieux ... pourquoi le vote à la baisse? – Lazarus

1

Il y a deux choses à regarder ici. Tout d'abord, restreindre l'accès à chaque dossier par rôle devrait être assez simple si vous utilisez des éléments <location> dans votre web.config, par exemple.

<location path="Resellers"> 
    <system.web> 
     <authorization> 
      <allow roles="Reseller"/> 
      <deny roles="*"/> 
     </authorization> 
    </system.web> 
</location> 

<location path="Users"> 
    <system.web> 
     <authorization> 
      <allow roles="User"/> 
      <deny roles="*"/> 
     </authorization> 
    </system.web> 
</location> 
... 

également dans vos pages individuelles, vous pouvez appeler la fonction IsUserInRole pour vérifier si votre utilisateur est dans le rôle correct pour accéder à la page. Vous pouvez obtenir une copie de Beginning ASP.NET Security.

+0

Wont que refuser tous les rôles, puis arrêter? – Lazarus

+0

@Lazarus Eventuellement ... Je ne me souviens jamais de tous les tenants et aboutissants de la configuration de l'élément d'autorisation. Les ai échangés autour. – PhilPursglove

+0

Je crois qu'ils sont traités dans l'ordre de la définition :) – Lazarus

0

Dans chacun des dossiers, vous devez placer un fichier web.config qui restreint l'accès au rôle en question. Par exemple, dans le dossier des revendeurs, vous trouverez un fichier web.config contenant:

<authorization> 
    <deny users="*"/> 
    <allow roles="Resellers"/> 
</authorization> 

Et ainsi de suite pour les autres dossiers.

+0

Wont que frapper le Refuser tous les utilisateurs et arrêter? – Lazarus

0

utilisation comme ci-dessous le code:

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

Vous pouvez utiliser le web.config pour définir l'autorisation ou vous pouvez également obtenir plus granulaire et décorer la classe ou la méthode que vous voulez verrouiller comme ceci:

[PrincipalPermissionAttribute(SecurityAction.Demand, Role = @"Administrators")] 

Tout cela fait partie du gestionnaire de rôles que vous pouvez configurer. Commencez par lire l'article this qui explique ce qu'il faut faire.