2008-08-28 9 views
3

J'utilise le ASP.NET Login Controls et Forms Authentication pour l'adhésion/pouvoirs pour une application Web ASP.NET.Comment gérer au mieux les autorisations basées sur les rôles à l'aide de l'authentification par formulaires sur mon application Web ASP.NET?

J'ai deux rôles:

  • utilisateurs
  • Administrateurs

Je veux des pages pour être visible par quatre groupes différents:

  • Tout le monde (par défaut, Aide)
  • Anonyme (CreateUser, Connexion, PasswordRecovery)
  • utilisateurs (ChangePassword, DataEntry)
  • Administrateurs (Rapport)

L'expansion de l'exemple dans le ASP.NET HOW DO I Video Series: Membership and Roles, j'ai mis les fichiers page dans ces dossiers:

Visual Studio Solution Explorer

Et j'ai utilisé l'outil d'administration de site Web ASP.NET pour définir des règles d'accès pour chaque dossier.

Cela fonctionne mais semble brutal pour moi et il crée des problèmes when Login.aspx is not at the root et avec le ReturnUrl parameter de Login.aspx.

Y a-t-il une meilleure façon de procéder? Existe-t-il un moyen simple de définir des autorisations au niveau de la page plutôt qu'au niveau du dossier?

Répondre

1

solutions A couple du haut de ma tête.

  1. Vous pouvez définir des restrictions pour chaque page de votre fichier web.config. Cela vous permettrait d'avoir la hiérarchie de dossiers que vous souhaitez utiliser. Cependant, il faudra que vous gardiez le fichier web.config à jour chaque fois que vous ajoutez des pages supplémentaires. La bonne partie de la structure des dossiers détermine l'accessibilité, c'est que vous n'avez pas à y penser lorsque vous ajoutez de nouvelles pages.
  2. Demandez à vos pages héritent des classes personnalisées (à savoir EveryonePage, UserPage, PageD'Administration, etc.) et de mettre un chèque de rôle dans la routine Page_Load.
1

Une solution que je l'ai utilisé dans le passé est la suivante:

  1. Créer une page de base appelée 'SecurePage' ou quelque chose à cet effet.
  2. Ajouter une propriété « AllowedUserRoles » à la page de base qui est une liste générique des rôles utilisateur ou la liste où int est l'identifiant du rôle.
  3. Dans l'événement Page_Load d'une page étendue SecurePage, vous ajoutez chaque rôle d'utilisateur autorisé à la propriété AllowedUserroles.
  4. Dans la page de base override OnLoad() et vérifier si l'utilisateur a l'un des rôles énumérés dans AllowedUserRoles.

Cela permet à chaque page d'être personnalisée sans que vous ayez à mettre beaucoup de choses dans votre web.config pour contrôler chaque page.

1

Dans la page maître, je définis une propriété publique qui bascule la vérification de la sécurité, par défaut à true. Je déclare également une chaîne qui est un; liste délimitée des rôles nécessaires pour cette page.

la charge page de ma page principale Je procédez comme suit

if (_secure) 
{ 
    if (Request.IsAuthenticated) 
    { 
    if (_role.Length > 0) 
    { 
     if (PortalSecurity.IsInRoles(_role)) 
     { 
     return; 
     } 
     else 
     { 
     accessDenied = true; 
     } 
    } 
    else 
    { 
     return; 
    } 
    } 
} 

//do whatever you wanna do to people who dont have access.. bump to a login page or whatever 

aussi vous devrez mettre

en haut de vos pages afin que vous puissiez accéder aux propriétés étendues votre page maître

Questions connexes