Nei precedenti post ho parlato degli oggetti IIDentity e IPrincipal. Quello di cui non abbiamo parlato sono i loro attributi e come utilizzarli per evitare di eseguire codice nel caso in cui l'utente non sia correttamente autorizzato. Nel caso si voglia proprio realizzare una struttura di questo tipo è necessario andare a lavorare sulla permission PrincipalPermission insieme ad alcuni suoi attribiti (PrincipalPermissionAttribute).

PrincipalPermission ha tre proprietà da valorizzare.

  • Authenticated
  • Name
  • Role

Il loro funzionamento è presto illustrato dallo snippet di codice che segue. 

[PrincipalPermission(SecurityAction.Demand, Role="TrustedUsers")]
private static void RunTrustedUsersCode()
{
    Console.WriteLine("Waaa appartengo al gruppo TrustedUsers!");
}

Il metodo RunTrustedUsersCode può essere eseguito unicamente nel caso in cui l'utente appartiene al gruppo TrustedUsers. Non solo, volendo, si può permettere l'esecuzione del codice solo ed unicamente nel caso in, a "girare" il codice è l'utente amarziali del gruppo TrustedUsers.

 

[PrincipalPermission(SecurityAction.Demand,Authenticated=true,Role="TrustedUsers",Name="amarziali")]
private static void RunAsMarziali()
{
    // .. inserire qui il codice da eseguire ..
}

Nel caso in cui si abbia la necessità di permettere l'esecuzione del codice ai gruppi TrustedUsers e AlmostTrustedUsers è possibile operare come segue.

 

[PrincipalPermission(SecurityAction.Demand, Role="TrustedUsers")]
[PrincipalPermission(SecurityAction.Demand, Role="AlmostTrustedUsers")]
private static void RunRandomGroupLevels()
{
    // .. inserire qui il codice ..
}