2010-08-06 15 views
1

Je suis en train d'utiliser l'autorisation basée sur les rôles de manière déclarative, lorsque tentative d'utilisateur non autorisé d'accéder à une page, il ne déclenche une exception ou montrer à l'utilisateur un message d'erreur. Qu'est-ce que je devrais faire pour montrer un message non autorisé? est-ce possible de manière déclarative?autorisation basée sur les rôles

utilisant le codage n'est pas un sens d'option intéressante, j'ai plusieurs rôles, et le dossier autorisé pour plusieurs rôles alors que d'autres dossiers sont autorisés pour un rôle.

merci

+0

Pourriez-vous utiliser la façon dont vous l'avez configuré? Que fait-il au lieu de montrer une erreur? – Greg

+0

votre question n'est pas clairement définie. Il existe des mécanismes bien définis pour effectuer le contrôle d'accès déclaratif, mais dans le standard asp.net aucun d'entre eux n'aboutira à un 503. Le plus que vous pouvez espérer est une redirection non-descript à la page de connexion. cela peut être problématique et insatisfaisant dans de nombreux scénarios. S'il vous plaît, définissez plus clairement ce que vous essayez de faire et quelles mesures vous avez prises jusqu'à présent pour y parvenir. –

Répondre

3

Utilisez le code suivant dans votre page de connexion pour rediriger l'utilisateur vers une page soit non autorisée ou la page par défaut.

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(Page.IsPostBack) 
      return; 

     if(!Request.IsAuthenticated) 
      return; 

     if(!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) && !UrlAuthorizationModule.CheckUrlAccessForPrincipal(Request.QueryString["ReturnUrl"], User,"GET")) 
     { 
      // In Forms Authentication, authenticated but unauthorized requests are converted into a Redirect to the Login page. 
      // Redirect these to an error page instead. 
      Response.Redirect("~/UnauthorizedAccess.aspx", false); 
     } 
     else 
     { 
      Response.Redirect(FormsAuthentication.DefaultUrl, false); 
     } 
    } 

Voir ce lien pour une image de ce qui se passe et plus d'informations:

http://www.asp.net/security/tutorials/user-based-authorization-cs

+0

Utilisation inappropriée de matériel protégé par des droits d'auteur. –

+0

@Sky Sanders: J'ai supprimé le matériel dont vous parlez, je pense. Si non, veuillez fournir plus de détails. – Greg

0

En cas d'échec de l'autorisation, une exception est générée. Ça doit être en train de passer. Qu'est-ce que vous utilisez pour l'authentification? Avez-vous désactivé l'accès anonyme?

+0

Etes-vous sûr, parce que quand j'utilise un faux rôle, je suis redirigé vers la page de connexion !!, quelles sont les chances? L'accès anonyme est désactivé. – Costa

+0

Je n'avais pas réalisé que vous aviez une configuration de redirection pour un échec d'authentification. Quel type d'authentification utilisez-vous? – Ryan

+0

asp.net Authentification de formulaire – Costa

0

Vous pourriez peut-être utiliser une carte du site. Plus sur ceux here, plus un peu de lier la sécurité à eux here.

0

Il est également possible d'utiliser web.config pour définir des autorisations pour différents dossiers ou fichiers. Chaque dossier pourrait avoir une liste de permet ou denys comme ceci:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <authorization> 
     <allow roles="Administrators" /> 
     <allow roles="Random Role" /> 
     <deny users="*" /> 
     <deny users="?" /> 
    </authorization> 
    </system.web> 
</configuration> 

Puis, quand quelqu'un frappe la page qui requiert une autorisation qu'ils ne sont pas autorisés pour elle les rediriger vers votre page de connexion. Vous pouvez ensuite vérifier la chaîne de requête pour la page d'origine et éventuellement définir des réponses spécifiques à un cas ou, à tout le moins, s'il contient une page returnURL, dites "Vous n'êtes pas autorisé à voir cette page".