2012-08-06 2 views
1

J'essaie d'implémenter un identifiant pour mon application. L'utilisateur peut avoir plusieurs rôles (visionneuse, opérateur, administrateur, etc.). Mais il doit choisir un certain rôle avec lequel il veut se connecter, donc il a probablement des administrateurs mais il peut se connecter en tant que "Viewer" sans droits d'administrateur.C# Connexion RoleProvider avec rôle spécifique

Le problème est maintenant que si j'essaie de sécuriser certaines fonctions avec l'attribut RequiredRole pour un administrateur, l'utilisateur ne devrait pas pouvoir accéder à cette fonction s'il est connecté en tant que spectateur, même s'il aurait des droits d'administrateur.

Est-ce qu'un tel support est supporté par le framework ou est-ce que quelqu'un a déjà fait quelque chose de similaire?

Merci quand même pour votre aide

Répondre

0

Vous n'avez pas spécifié ce que vous voulez arriver quand il essaie de faire quelque chose qui nécessite l'administrateur quand il est connecté comme Viewer, mais puisque vous pouvez implémenter votre propre fournisseur de rôles, ce est facile à faire. Vous devriez pouvoir stocker quelque chose dans la session ou votre objet principal d'utilisateur indiquant les «rôles disponibles» (certains d'entre eux ne pourront pas choisir l'administrateur, par exemple) et un autre pour le rôle choisi. Tout ce que vous devez faire est de mettre une page sur votre site pour permettre à l'utilisateur de sélectionner son rôle actuel. Comme vous utiliseriez votre propre fournisseur de rôles, vous pouvez simplement l'implémenter pour extraire les informations pertinentes de la session (ou du principal utilisateur) lors de la vérification des rôles. Vous pourrez toujours utiliser l'attribut RequiredRole comme vous le souhaitez.

Il existe quelques exemples de comment vous pouvez modifier le comportement de vous rediriger vers le formulaire d'ouverture de session lorsque vous n'avez pas accès pour vous rediriger vers une page 403 (par exemple With ASP.NET membership, how can I show a 403?). Vous pourriez alors montrer quelque chose sur cette page qui permettrait à l'utilisateur de passer à un rôle plus élevé s'ils en ont un disponible.

+0

Salut, merci pour votre réponse rapide :) ainsi de côté client i peut l'objet acces utilisateur: WebContext.Current.User Cet objet utilisateur personnalisé a les deux propriétés CurrentRole et AvailableRoles. Le login où l'utilisation peut sélectionner son rôle est également déjà implémenté, mais maintenant je ne sais pas comment accéder à ce CurrentRole dans mon RoleProvider pour adapter ma méthode GetRolesForUser, qui je pense devrait juste retourner ce rôle actuel? Ou dois-je adapter la méthode IsUserInRole? Merci pour votre aide =) – huserben

+0

Vous devrez implémenter 'IsUserInRole', et probablement' GetRolesForUser'. De ces deux, vous devriez être en mesure d'accéder à 'HttpContext.Current', et à partir de là, vous avez accès aux objets User et Session. Cela devrait être tout ce dont vous auriez besoin. GetRolesForUser ne doit renvoyer que le rôle "Actuel". – Richard

+0

Salut à nouveau, merci, je l'ai essayé maintenant de cette façon ... à mon avis cela devrait fonctionner ... mais j'ai rencontré une exception maintenant: comme mentionné, nous avons un objet utilisateur personnalisé pour stocker ces informations supplémentaires comme le rôle actuel quand j'essaie maintenant d'accéder à HttpContext.Current.User il est de type IPrincipal alors que WebContext.Current.User est notre objet personnalisé, donc je ne suis pas en mesure d'accéder aux informations nécessaires =/ Je pense que si je recevais cette information mon problème serait résolu ... – huserben

Questions connexes