Procedura: richiedere le autorizzazioni minime tramite il flag RequestMinimum
Aggiornamento: novembre 2007
Il flag RequestMinimum consente di richiedere un set minimo di autorizzazioni necessarie per l'esecuzione del codice. Il flag RequestRefuse consente invece di rifiutare le autorizzazioni specificando in modo esplicito quelle che non devono essere concesse al codice.
A differenza dell'utilizzo del flag RequestMinimum, l'applicazione viene eseguita se non riceve tutte le autorizzazioni richieste tramite il flag RequestOptional e viene generata un'eccezione SecurityException quando si tenta di accedere a una risorsa protetta. Se si utilizza questo tipo di richiesta, è necessario che il codice sia in grado di intercettare le eventuali eccezioni generate nel caso in cui l'autorizzazione facoltativa non venga concessa.
Nell'esempio riportato di seguito viene richiesta l'autorizzazione FileIOPermission utilizzando il flag RequestMinimum. L'esempio non verrà eseguito se l'autorizzazione richiesta non è stata concessa. In questo esempio si presuppone l'esistenza di una classe Log fittizia in LogNameSpace. Nella classe Log è contenuto il metodo MakeLog che crea un nuovo file di log sul computer locale. Nell'applicazione viene creata una nuova istanza della classe Log e viene eseguito il metodo MakeLog all'interno del blocco try. Mediante la parola chiave catch viene intercettata qualsiasi eccezione SecurityException generata e viene visualizzato un messaggio.
Esempio
Imports System
Imports System.Security
'The hypothetical class log is in this namespace.
Imports LogNameSpace
Imports System.Security.Permissions
'The request is placed at the assembly level.
<assembly: FileIOPermission(SecurityAction.RequestMinimum, Unrestricted := True)>
Namespace MyNamespace
Public Class MyClass1
Public Sub New()
End Sub
'Entry point that delegates to C-style main Private Function.
Public Overloads Shared Sub Main()
Main(System.Environment.GetCommandLineArgs())
End Sub
Overloads Public Shared Sub Main(args() As String)
'Put any code that requires optional permissions in the try block.
Try
Dim MyLog As New Log()
MyLog.MakeLog()
Console.WriteLine("The Log has been created.")
'Catch the security exception and inform the user that the
'application was not granted FileIOPermission.
Catch
Console.WriteLine("This application does not have permission to write to the disk.")
End Try
End Sub
End Class
End Namespace
//The request is placed at the assembly level.
using System.Security.Permissions;
[assembly:FileIOPermission(SecurityAction.RequestMinimum, Unrestricted = true)]
namespace MyNamespace {
using System;
using System.Security;
//The hypothetical class log is in this namespace.
using LogNameSpace;
public class MyClass {
public MyClass() {
}
public static void Main(string[] args) {
//Put any code that requires optional permissions in the try block.
try {
Log MyLog = new Log();
MyLog.MakeLog();
Console.WriteLine("The Log has been created.");
}
//Catch the security exception and inform the user that the
//application was not granted FileIOPermission.
catch(SecurityException) {
Console.WriteLine("This application does not have permission to write to the disk.");
}
}
}
}
Mediante il codice appena esaminato viene creato un file di log e, se al codice sono state concesse autorizzazioni sufficienti, viene visualizzato alla console il seguente messaggio:
The Log has been created.
Se il codice viene eseguito da una condivisione e le impostazioni di protezione locale non consentono che disponga di FileIOPermission, a tale codice non verrà concessa la necessaria autorizzazione e verrà visualizzato il seguente messaggio:
This application does not have permission to write to the disk.