2009-10-30 3 views
0

J'ai mis en place un fourre-tout la méthode des exceptions de sécurité dans mon global.asax comme ça ...System.Security.SecurityException - Obtenez le nom du rôle

protected void Application_Error(object sender, EventArgs e) 
    { 

     Exception err = Server.GetLastError(); 
     if (err is System.Security.SecurityException) 
      Response.Redirect("~/Error/Roles.aspx); 

    } 

Y at-il une propriété que je peux accéder à qui montre la nom du rôle qui manquait aux autorisations des utilisateurs? C'est à dire. err.RoleThatFailed?

Manh grâce,

ETFairfax.

Répondre

0

Vous pouvez simplement sortir la totalité de la pile.

dire,

err.ToString() vous en dira plus d'informations.

+0

Merci pour la réponse. Je voulais être plus précis sur la page que les utilisateurs voient. I.E "Vous n'avez pas la permission XYZ". err.ToString() va dans mon journal des erreurs pour que je puisse voir ce qui s'est passé, mais l'utilisateur a besoin de voir quelque chose d'un peu plus amical! – ETFairfax

0

Le rôle peut être trouvé dans la propriété PermissionState. Cette propriété contient du code XML qui doit être analysé. Le nom du rôle peut être trouvé dans l'élément 'Identity', qui a un attribut nommé 'Role'.

Exception err = Server.GetLastError(); 
if (err is System.Security.SecurityException) 
{ 
    var xmlDocument = new XmlDocument(); 
    xmlDocument.LoadXml(err.PermissionState); 
    string roleName = xmlDocument.GetElementsByTagName("Identity")[0].Attributes["Role"].Value; 

    ... 

    Response.Redirect("~/Error/Roles.aspx);  
} 
Questions connexes