La Richiesta di Autorizzazioni (Permissions).

Tramite la richiesta di autorizzazioni comunichiamo al runtime le autorizzazioni per eseguire il codice. Per fare ció dobbiamo dichiarare le autorizzazioni nel codice tramite attributi (sintassi dichiarativa). Una volta che viene compilatp queste autorizzazioni risiederanno nel manifesto. Quando viene caricato l' assembly queste autorizzazioni vengono prese in esame. Le richieste possono influenzare solamente un rifiuto del rilascio di autorizzazioni, mai un aumento.Inoltre vi ricordo che per ultimo sono sempre i criteri admin locali ad avere il controllo ultimo sul numero massimo di autorizzazioni concesse.

MSDN fornisce i seguenti motivi per usare sempre le autorizzazioni :

  • Dopo che abbiamo richiesto le permission, se il codice puo' girare siamo piu' sicuri che giri correttamente. Inoltre bisogna accertarsi che senza autorizzazioni il codice possa girare correttamente.
  • Se si richiedono se le autorizzazioni necessarie, siamo piu' sicuri di usare un codice sicuro e di avere un accesso sicuro alle risorse.
  • Tramite l' ausilio dello strumento Permview gli amministratori saranno in grado di visualizzare e gestire le permission per quel codice.

Tramite questa implementazione possiamo controllare sia specifiche di esecuzione che di controllo. Se usiamo un codice che non richiama specifiche permissions, ma se queste sono impostate nel sistema, l' utente non sarà in grado di gestire il codice e l' ammistratore sarà impossibilitato a cambiarne le autorizzazioni stesse, perchè non sono gestite nel'' assembly.
Vediamo ora nel dettaglio le Tipologie di Autorizzazione.

  • Minime RequestMinimum
    Sono le autorizzazioni minime per eseguire il codice.
  • Facoltative RequestOptional
    Possono essere concesse al codice ma non sono indispensabili per l' esecuzione. Con questa implicitamente rifiutiamo le altre autorizzazioni non esplicitamente richieste.
  • Rifiutate RequestRefuse
    Autorizzazioni che non bisogna mai rilasciare. (Es: IoPermission se non volgiamo che scrivano nel Disco)
  • Set di autorizzazioni Built-in
    Sono quelle incorporate : Nothing, Esecution, FullTrust, Internet, LocalIntranet, SkipVerification.
  • Codificate XML XML Encoded
    Puo' essere sia una stringa XML contenente le autorizzazioni o un File XML.

Vi ricordo che se usiamo RequestMinimum il CLR rilascerà tutte le autorizzazioni impostate dai Criteri di Protezione (Security Policy).
Con questo metodo dobbiamo essere certi delle Autorizzazioni rilasciate dai Criteri di Protezione, perchè potrebbe succedere che nei Criteri non siamo permesso alcunchè e che il nostro Assembly, anche se ha RequestMinimum, non possa essere eseguito.

Vorrei infine prendere un secondo in esame i Permessi di Accesso (Code Access Permissions).
Costruttore e uso della Classe CodeAccessPermissions.


Visual Basic - (Dichiarazione)

<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class CodeAccessPermission
    Implements IPermission, ISecurityEncodable, IStackWalk

Visual Basic (Utilizzo)

Dim instance As CodeAccessPermission

Non ci resta che visualizzare i membri di detta classe che sono quelli che servono per determinare le autorizzazioni; possiamo farne un Overload e possono essere usati nell' implementazione derivata di detta classe.

  • Copy
    Crea e restituisce una copia identica dell' oggetto di Autorizzazione.
  • Intersect
    Crea un' istanza che contiene un' intersezione dell' autorizzazione corrente piu' quella passata.
    Solo una richiesta che passi entrambe le autorizzazioni originali passerà anche l'intersezione.
  • IsSubsetOf
    Determina se l' Autorizzazione corrente fa parte di quella specificata.
  • ToXml
    Crea una codifica XML dell'oggetto di protezione e del relativo stato corrente.
  • FromXml
    Ricostruisce un oggetto di protezione con uno stato specificato tratto da una codifica XML.
  • Union
    Crea un'autorizzazione che è l'unione dell'autorizzazione corrente e dell'autorizzazione specificata.
    Il risultato di una chiamata al metodo Union è un'autorizzazione che rappresenta tutte le operazioni indicate sia dall'autorizzazione corrente che da quella specificata. Qualsiasi richiesta che passi una di queste autorizzazioni passerà anche la relativa unione.