Oggetti PrincipalPermission
Il modello di sicurezza basata sui ruoli supporta un oggetto di permesso analogo agli oggetti di permesso utilizzati nel modello di sicurezza per l'accesso al codice. L'oggetto PrincipalPermission rappresenta l'identità e il ruolo di cui una determinata classe Principal deve disporre per poter essere eseguita. È possibile utilizzare la classe PrincipalPermission sia per i controlli di sicurezza imperativi che per quelli dichiarativi.
Per implementare la classe PrincipalPermission in modo imperativo, creare una nuova istanza della classe e inizializzarla con il nome e il ruolo che si desidera che sia associato agli utenti per accedere al codice. Nel codice riportato di seguito, ad esempio, viene inizializzata una nuova istanza di tale oggetto con identità "Joan" e ruolo "Teller".
String id = "Joan";
String role = "Teller";
PrincipalPermission principalPerm = new PrincipalPermission(id, role);
Dim id As String = "Joan"
Dim role As String = "Teller"
Dim principalPerm As New PrincipalPermission(id, role)
È possibile creare un'autorizzazione analoga in modo dichiarativo utilizzando la classe PrincipalPermissionAttribute. Il codice che segue inizializza in modo dichiarativo l'identità su "Joan" e il ruolo su "Teller".
[PrincipalPermissionAttribute(SecurityAction.Demand, Name = "Joan", Role = "Teller")]
<PrincipalPermissionAttribute(SecurityAction.Demand, Name := "Joan", Role := "Teller")>
Perché il controllo di sicurezza possa avere esito positivo quando viene effettuato, è necessario che sia l'identità che il ruolo specificati corrispondano. Quando tuttavia si crea l'oggetto PrincipalPermission, è possibile passare una stringa di identità nulla a indicare che l'identità del principale può essere una qualsiasi. Analogamente, il passaggio di una stringa di ruolo nulla indica che il principale può rivestire qualsiasi ruolo (o non rivestirne alcuno). Per la sicurezza dichiarativa è possibile ottenere lo stesso risultato omettendo una delle due proprietà. Il codice che segue, ad esempio, utilizza l'attributo PrincipalPermissionAttribute per indicare in modo dichiarativo che un principale può avere qualsiasi nome, ma è necessario che presenti il ruolo di cassiere (Teller).
[PrincipalPermissionAttribute(SecurityAction.Demand, Role = "Teller")]
<PrincipalPermissionAttribute(SecurityAction.Demand, Role := "Teller")>