Cómo: Solicitar permisos mínimos mediante el marcador RequestMinimum
Actualización: noviembre 2007
El marcador RequestMinimum permite solicitar un conjunto mínimo de permisos que el código necesita para ejecutarse. Por el contrario, el indicador RequestRefuse permite denegar permisos, si se especifica explícitamente los permisos que no se deben conceder al código.
En contraste con la utilización del indicador RequestMinimum, la aplicación se ejecuta si no recibe todos los permisos solicitados mediante el indicador RequestOptional, y se inicia una excepción SecurityException cuando la aplicación intenta obtener acceso a un recurso protegido. Si se utiliza este tipo de solicitud, se ha de permitir que el código detecte las excepciones que se inicien si al código no se le concede el permiso opcional.
El ejemplo siguiente solicita FileIOPermission mediante el indicador RequestMinimum. El ejemplo no se ejecutará si no se ha concedido el permiso solicitado. En este ejemplo, se supone que existe una clase Log hipotética en LogNameSpace. La clase Log contiene el método MakeLog que crea un nuevo archivo de registro en el equipo local. Esta aplicación crea una nueva instancia de la clase Log y ejecuta el método MakeLog en el bloque try. Mediante la palabra clave catch, intercepta las excepciones SecurityException que se inicien y muestra un mensaje.
Ejemplo
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.");
}
}
}
}
El código anterior crea el archivo de registro y muestra el mensaje siguiente en la consola si dispone de suficientes permisos:
The Log has been created.
Si el código se ejecuta desde un recurso compartido y la configuración de seguridad local no permite que tenga FileIOPermission, no se concederán al código los permisos necesarios y se mostrará el siguiente mensaje:
This application does not have permission to write to the disk.