2009-07-17 8 views
1

Der folgende Code funktioniert, aber es verwendet eine Sicherheitsanforderung, die in meiner Anwendung allzu oft dazu führt, dass eine SecurityException ausgelöst wird. Wie Sie sehen, ist der Code in Ordnung, aber ich würde es gerne beschleunigen. Irgendwelche Vorschläge, wie man Sachen verbessert, würde sehr geschätzt werden!Gibt es eine Möglichkeit, herauszufinden, ob ein Anrufer sehr vertrauenswürdig ist, OHNE dass möglicherweise eine Ausnahme ausgelöst wird?

using System.Security; 
using System.Web; 

namespace MyProject 
{ 
    internal static class TrustHelper 
    { 
     public static bool IsHighlyTrusted() 
     { 
      try 
      { 
       AspNetHostingPermission permission = 
        new AspNetHostingPermission(
         AspNetHostingPermissionLevel.High); 

       permission.Demand(); 

       return true; 
      } 
      catch (SecurityException) 
      { 
       return false; 
      } 
     } 
    } 
} 

Antwort

1

Verwenden Sie die SecurityManager ...

var perm = new AspNetHostingPermission(AspNetHostingPermissionLevel.High); 
var hasPerm = System.Security.SecurityManager.IsGranted(perm); 
+0

Gibt es Gründe für die Abwärts Abstimmung? –

1

Warum nicht einfach den Wert im statischen Initialisierer einmal berechnen und das Ergebnis speichern?

Sicherheit "Beweise" in .NET wird gesammelt, wenn eine Assembly geladen wird, und wird verwendet, um Berechtigungen zu bestimmen. Daher ändern sich Berechtigungen während der Lebensdauer einer Assembly nicht und können beim Start festgelegt werden.

internal static class TrustHelper 
{ 
    static TrustHelper() 
    { 
     try 
     { 
      var permission = new AspNetHostingPermission(
       AspNetHostingPermissionLevel.High); 
      permission.Demand(); 

      TrustHelper.IsHighlyTrusted = true; 
     } 
     catch (SecurityException) 
     { 
      TrustHelper.IsHighlyTrusted = false; 
     } 
    } 

    public static bool IsHighlyTrusted() 
    { 
     get; 
     private set; 
    } 
} 
Verwandte Themen