Exportar (0) Imprimir
Expandir todo

Cómo: Solicitar permisos opcionales mediante el marcador RequestOptional

Actualización: noviembre 2007

El indicador SecurityAction.RequestOptional permite solicitar un conjunto de permisos, aunque deniega el resto de los permisos que concedería el motor en tiempo de ejecución. Por el contrario, el indicador RequestRefuse permite denegar permisos, si se especifica explícitamente qué permisos 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.

En el ejemplo siguiente, se solicita FileIOPermission con el indicador SecurityAction.RequestOptional, que indirectamente deniega todos los demás permisos. 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.

//The request is placed at the assembly level.
using System.Security.Permissions;
[assembly:FileIOPermission(SecurityAction.RequestOptional, 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.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft