# Language it-IT translations for PACKAGE package.
#
# Automatically generated, 2008, 2009.
msgid ""
msgstr ""
"Project-Id-Version: Security\n"
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
"POT-Creation-Date: 2009-06-25 15:02+0000\n"
"PO-Revision-Date: 2009-11-22 19:29+0100\n"
"Last-Translator: Nicola Benaglia <nico.benaz@gmail.com>\n"
"Language-Team: it <stefano.travelli@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 0.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. Tag: title
#: Security.xml:4
#, no-c-format
msgid "Security"
msgstr "Sicurezza"

#. Tag: title
#: Security.xml:7
#, no-c-format
msgid "Overview"
msgstr "Panoramica"

#. Tag: para
#: Security.xml:9
#, no-c-format
msgid "The Seam Security API provides a multitude of security-related features for your Seam-based application, covering such areas as:"
msgstr "Le API della sicurezza di Seam forniscono una serie di caratteristiche relative alla sicurezza di un'applicazione basata su Seam, coprendo le seguenti aree:"

#. Tag: para
#: Security.xml:16
#, no-c-format
msgid "Authentication - an extensible, JAAS-based authentication layer that allows users to authenticate against any security provider."
msgstr "Autenticazione - uno strato estensibile, basato su JAAS che consente all'utente di autenticarsi con qualsiasi fornitore di servizi di sicurezza."

#. Tag: para
#: Security.xml:22
#, no-c-format
msgid "Identity Management - an API for managing a Seam application's users and roles at runtime."
msgstr "Gestione delle identità - una API per gestire a run time gli utenti e i ruoli di una applicazione Seam."

#. Tag: para
#: Security.xml:27
#, no-c-format
msgid "Authorization - an extremely comprehensive authorization framework, supporting user roles, persistent and rule-based permissions, and a pluggable permission resolver for easily implementing customised security logic."
msgstr "Autorizzazione - un framework di autorizzazione estremamente comprensibile, che gestisce i ruoli degli utenti, i permessi persistenti oppure basati sulle regole e un risolutore di permessi modulare che consente di implementare facilmente una logica personalizzata per la gestione della sicurezza."

#. Tag: para
#: Security.xml:33
#, no-c-format
msgid "Permission Management - a set of built-in Seam components to allow easy management of an application's security policy."
msgstr "Gestione dei permessi - un insieme di componenti Seam predefiniti che consente una gestione facile delle politiche di sicurezza dell'applicazione."

#. Tag: para
#: Security.xml:39
#, no-c-format
msgid "CAPTCHA support - to assist in the prevention of automated software/scripts abusing your Seam-based site."
msgstr "Gestione dei CAPTCHA - per assistere nella prevenzione dagli attacchi automatici tramite software o script verso un sito basato su Seam."

#. Tag: para
#: Security.xml:44
#, no-c-format
msgid "And much more"
msgstr "E molto altro"

#. Tag: para
#: Security.xml:50
#, no-c-format
msgid "This chapter will cover each of these features in detail."
msgstr "Queste capitolo si occuperà in dettaglio di ciascuna di queste caratteristiche."

#. Tag: title
#: Security.xml:57
#, no-c-format
msgid "Disabling Security"
msgstr "Disabilitare la sicurezza"

#. Tag: para
#: Security.xml:59
#, no-c-format
msgid "In some situations it may be necessary to disable Seam Security, for instances during unit tests or because you are using a different approach to security, such as native JAAS. Simply call the static method <literal>Identity.setSecurityEnabled(false)</literal> to disable the security infrastructure. Of course, it's not very convenient to have to call a static method when you want to configure the application, so as an alternative you can control this setting in components.xml:"
msgstr "In determinate situazioni può essere necessario disabilitare la gestione della sicurezza in Seam, ad esempio durante i test oppure perché si sta usando un diverso approccio alla sicurezza, come l'uso diretto di JAAS. Per disabilitare l'infrastruttura della sicurezza chiamare semplicemente il metodo statico <literal>Identity.setSecurityEnabled(false)</literal>. Ovviamente non è molto pratico dover chiamare un metodo statico quando si vuole configurare un'applicazione, perciò in alternativa è possibile controllare questa impostazione in components.xml:"

#. Tag: para
#: Security.xml:69
#, no-c-format
msgid "Entity Security"
msgstr "Sicurezza delle entità"

#. Tag: para
#: Security.xml:72
#, no-c-format
msgid "Hibernate Security Interceptor"
msgstr "Intercettore della sicurezza in Hibernate"

#. Tag: para
#: Security.xml:75
#, no-c-format
msgid "Seam Security Interceptor"
msgstr "Intercettore della sicurezza in Seam"

#. Tag: para
#: Security.xml:78
#, no-c-format
msgid "Page restrictions"
msgstr "Restrizioni sulle pagine"

#. Tag: para
#: Security.xml:81
#, no-c-format
msgid "Servlet API security integration"
msgstr "Integrazione con la sicurezza delle API Servlet"

#. Tag: para
#: Security.xml:85
#, no-c-format
msgid "Assuming you are planning to take advantage of what Seam Security has to offer, the rest of this chapter documents the plethora of options you have for giving your user an identity in the eyes of the security model (authentication) and locking down the application by establishing constraints (authorization). Let's begin with the task of authentication since that's the foundation of any security model."
msgstr "Assumendo che si stia pianificando di sfruttare i vantaggi che la sicurezza Seam ha da offrire, il resto di questo capitolo documenta l'insieme delle opzioni disponibili per dare agli utenti un'identità dal punto di vista del modello di sicurezza (autenticazione) e un accesso limitato all'applicazione secondo dei vincoli stabiliti (autorizzazione). Iniziamo con la questione dell'autenticazione poiché è il fondamento di ogni modello di sicurezza."

#. Tag: title
#: Security.xml:95
#, no-c-format
msgid "Authentication"
msgstr "Autenticazione"

#. Tag: para
#: Security.xml:97
#, no-c-format
msgid "The authentication features provided by Seam Security are built upon JAAS (Java Authentication and Authorization Service), and as such provide a robust and highly configurable API for handling user authentication. However, for less complex authentication requirements Seam offers a much more simplified method of authentication that hides the complexity of JAAS."
msgstr "Le caratteristiche relative all'autenticazione nella gestione della sicurezza di Seam sono costruite su JAAS (Java Authentication and Authorization Service, servizio di autenticazione e autorizzazione Java) e, come tali, forniscono una API robusta e altamente configurabile per gestire l'autenticazione degli utenti. Comunque, per requisiti di autenticazione meno complessi, Seam offre un metodo di autenticazione molto semplificato che nasconde la complessità di JAAS."

#. Tag: title
#: Security.xml:104
#, no-c-format
msgid "Configuring an Authenticator component"
msgstr "Configurare un componente Authenticator"

#. Tag: para
#: Security.xml:107
#, no-c-format
msgid "If you use Seam's Identity Management features (discussed later in this chapter) then it is not necessary to create an authenticator component (and you can skip this section)."
msgstr "Nel caso si utilizzino le funzioni di gestione delle identità di Seam (discusse più avanti in questo capitolo) non è necessario creare un componente Authenticator (e si può saltare questo paragrafo)."

#. Tag: para
#: Security.xml:113
#, no-c-format
msgid "The simplified authentication method provided by Seam uses a built-in JAAS login module, <literal>SeamLoginModule</literal>, which delegates authentication to one of your own Seam components. This login module is already configured inside Seam as part of a default application policy and as such does not require any additional configuration files. It allows you to write an authentication method using the entity classes that are provided by your own application, or alternatively to authenticate with some other third party provider. Configuring this simplified form of authentication requires the <literal>identity</literal> component to be configured in <literal>components.xml</literal>:"
msgstr "Il metodo di autenticazione semplificato fornito da Seam usa un modulo di login JAAS già fatto, <literal>SeamLoginModule</literal>, il quale delega l'autenticazione ad uno dei componenti dell'applicazione. Questo modulo di login è già configurato all'interno di Seam come parte dei criteri di gestione di default e in quanto tale non richiede alcun file di configurazione aggiuntivo. Esso consente di scrivere un metodo di autenticazione usando le classi entità che sono fornite dall'applicazione o, in alternativa, di esegure l'autenticazione con qualche altro fornitore di terze parti. Per configurare questa forma semplificata di autenticazione è richiesto di configurare il componente <literal>Identity</literal> in <literal>components.xml</literal>:"

#. Tag: programlisting
#: Security.xml:122
#, no-c-format
msgid ""
"<![CDATA[<components xmlns=\"http://jboss.org/schema/seam/components\"\n"
"            xmlns:core=\"http://jboss.org/schema/seam/core\"\n"
"            xmlns:security=\"http://jboss.org/schema/seam/security\"\n"
"            xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"            xsi:schemaLocation=\n"
"                \"http://jboss.org/schema/seam/components http://jboss.org/schema/seam/components-2.3.xsd\n"
"                 http://jboss.org/schema/seam/security http://jboss.org/schema/seam/security-2.3.xsd\">\n"
"\n"
"    <security:identity authenticate-method=\"#{authenticator.authenticate}\"/>\n"
"\n"
"</components>]]>"
msgstr ""
"<![CDATA[<components xmlns=\"http://jboss.org/schema/seam/components\"\n"
"            xmlns:core=\"http://jboss.org/schema/seam/core\"\n"
"            xmlns:security=\"http://jboss.org/schema/seam/security\"\n"
"            xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"            xsi:schemaLocation=\n"
"                \"http://jboss.org/schema/seam/components http://jboss.org/schema/seam/components-2.3.xsd\n"
"                 http://jboss.org/schema/seam/security http://jboss.org/schema/seam/security-2.3.xsd\">\n"
"\n"
"    <security:identity authenticate-method=\"#{authenticator.authenticate}\"/>\n"
"\n"
"</components>]]>"

#. Tag: para
#: Security.xml:124
#, no-c-format
msgid "The EL expression <literal>#{authenticator.authenticate}</literal> is a method binding that indicates the <literal>authenticate</literal> method of the <literal>authenticator</literal> component will be used to authenticate the user."
msgstr "L'espressione EL <literal>#{authenticator.authenticate}</literal> è la definizione di un metodo tramite la quale si indica che il metodo <literal>authenticate</literal> del componente <literal>authenticator</literal> verrà usato per autenticare l'utente."

#. Tag: title
#: Security.xml:133
#, no-c-format
msgid "Writing an authentication method"
msgstr "Scrivere un metodo di autenticazione"

#. Tag: para
#: Security.xml:135
#, no-c-format
msgid "The <literal>authenticate-method</literal> property specified for <literal>identity</literal> in <literal>components.xml</literal> specifies which method will be used by <literal>SeamLoginModule</literal> to authenticate users. This method takes no parameters, and is expected to return a boolean, which indicates whether authentication is successful or not. The user's username and password can be obtained from <literal>Credentials.getUsername()</literal> and <literal>Credentials.getPassword()</literal>, respectively (you can get a reference to the <literal>credentials</literal> component via <literal>Identity.instance().getCredentials()</literal>). Any roles that the user is a member of should be assigned using <literal>Identity.addRole()</literal>. Here's a complete example of an authentication method inside a POJO component:"
msgstr "La proprietà <literal>authenticate-method</literal> specificata per <literal>identity</literal> in <literal>components.xml</literal> specifica quale metodo sarà usato dal <literal>SeamLoginModule</literal> per autenticare l'utente. Questo metodo non ha parametri ed è previsto che restituisca un boolean, il quale indica se l'autenticazione ha avuto successo o no. Il nome utente e la password possono essere ottenuti da <literal>Credentials.getUsername()</literal> e <literal>Credentials.getPassword()</literal> rispettivamente (è possibile avere un riferimento al componente <literal>credentials</literal> tramite <literal>Identity.instance().getCredentials()</literal>). Tutti i ruoli di cui l'utente è membro devono essere assegnati usando <literal>Identity.addRole()</literal>. Ecco un esempio completo di un metodo di autenticazione all'interno di un componente POJO:"

#. Tag: programlisting
#: Security.xml:147
#, no-c-format
msgid ""
"<![CDATA[@Name(\"authenticator\")\n"
"public class Authenticator {\n"
"   @In EntityManager entityManager;\n"
"   @In Credentials credentials;\n"
"   @In Identity identity;\n"
"\n"
"   public boolean authenticate() {\n"
"      try {\n"
"         User user = (User) entityManager.createQuery(\n"
"            \"from User where username = :username and password = :password\")\n"
"            .setParameter(\"username\", credentials.getUsername())\n"
"            .setParameter(\"password\", credentials.getPassword())\n"
"            .getSingleResult();\n"
"\n"
"         if (user.getRoles() != null) {\n"
"            for (UserRole mr : user.getRoles())\n"
"               identity.addRole(mr.getName());\n"
"         }\n"
"\n"
"         return true;\n"
"      }\n"
"      catch (NoResultException ex) {\n"
"         return false;\n"
"      }\n"
"\n"
"   }\n"
"\n"
"}]]>"
msgstr ""
"<![CDATA[@Name(\"authenticator\")\n"
"public class Authenticator {\n"
"   @In EntityManager entityManager;\n"
"   @In Credentials credentials;\n"
"   @In Identity identity;\n"
"\n"
"   public boolean authenticate() {\n"
"      try {\n"
"         User user = (User) entityManager.createQuery(\n"
"            \"from User where username = :username and password = :password\")\n"
"            .setParameter(\"username\", credentials.getUsername())\n"
"            .setParameter(\"password\", credentials.getPassword())\n"
"            .getSingleResult();\n"
"\n"
"         if (user.getRoles() != null) {\n"
"            for (UserRole mr : user.getRoles())\n"
"               identity.addRole(mr.getName());\n"
"         }\n"
"\n"
"         return true;\n"
"      }\n"
"      catch (NoResultException ex) {\n"
"         return false;\n"
"      }\n"
"\n"
"   }\n"
"\n"
"}]]>"

#. Tag: para
#: Security.xml:149
#, no-c-format
msgid "In the above example, both <literal>User</literal> and <literal>UserRole</literal> are application-specific entity beans. The <literal>roles</literal> parameter is populated with the roles that the user is a member of, which should be added to the <literal>Set</literal> as literal string values, e.g. \"admin\", \"user\". In this case, if the user record is not found and a <literal>NoResultException</literal> thrown, the authentication method returns <literal>false</literal> to indicate the authentication failed."
msgstr "Nell'esempio precedente sia <literal>User</literal> che <literal>UserRole</literal> sono entity bean specifici dell'applicazione. Il parametro <literal>roles</literal> è popolato con i ruoli di cui l'utente è membro, che devono essere aggiunti alla <literal>Set</literal> come valori stringa, ad esempio \"amministratore\", \"utente\". In questo caso, se il record dell'utente non viene trovato e una <literal>NoResultException</literal> viene lanciata, il metodo di autenticazione restituisce <literal>false</literal> per indicare che l'autenticazione è fallita."

#. Tag: para
#: Security.xml:158
#, no-c-format
msgid "When writing an authenticator method, it is important that it is kept minimal and free from any side-effects. This is because there is no guarantee as to how many times the authenticator method will be called by the security API, and as such it may be invoked multiple times during a single request. Because of this, any special code that should execute upon a successful or failed authentication should be written by implementing an event observer. See the section on Security Events further down in this chapter for more information about which events are raised by Seam Security."
msgstr "Nella scrittura di metodo di autenticazione è importante ridurlo al minimo e libero da ogni effetto collaterale. Il motivo è che non c'è garanzia sul numero di volte che il metodo di autenticazione può essere chiamato dalle API della sicurezza, di conseguenza esso potrebbe essere invocato più volte durante una singola richiesta. Perciò qualsiasi codice che si vuole eseguire in seguito ad una autenticazione fallita o completata con successo dovrebbe essere scritto implementando un observer. Vedi il paragrafo sugli Eventi di Sicurezza più avanti in questo capitolo per maggiori informazioni su quali eventi sono emessi dalla gestione della sicurezza Seam."

#. Tag: title
#: Security.xml:170
#, no-c-format
msgid "Identity.addRole()"
msgstr "Identity.addRole()"

#. Tag: para
#: Security.xml:172
#, no-c-format
msgid "The <literal>Identity.addRole()</literal> method behaves differently depending on whether the current session is authenticated or not. If the session is not authenticated, then <literal>addRole()</literal> should <emphasis>only</emphasis> be called during the authentication process. When called here, the role name is placed into a temporary list of pre-authenticated roles. Once authentication is successful, the pre-authenticated roles then become \"real\" roles, and calling <literal>Identity.hasRole()</literal> for those roles will then return true. The following sequence diagram represents the list of pre-authenticated roles as a first class object to show more clearly how it fits in to the authentication process."
msgstr "Il metodo <literal>Identity.addRole()</literal> si comporta in modo diverso a seconda che la sessione corrente sia autenticata o meno. Se la sessione non è autenticata, allora <literal>addRole()</literal> dovrebbe essere chiamato <emphasis>solo</emphasis> durante il processo di autenticazione. Quando viene chiamato in questo contesto, il nome del ruolo è messo in una lista temporanea di ruoli pre autenticati. Una volta che l'autenticazione è completata i ruoli pre autenticati diventano ruoli \"reali\" e chiamando <literal>Identity.hasRole()</literal> per questi ruoli si otterrà <literal>true</literal>. Il seguente diagramma di sequenza rappresenta la lista dei ruoli pre autenticati come oggetto in primo piano per mostrare più chiaramente come si inserisce nel processo di autenticazione."

#. Tag: para
#: Security.xml:192
#, no-c-format
msgid "If the current session is already authenticated, then calling <literal>Identity.addRole()</literal> will have the expected effect of immediately granting the specified role to the current user."
msgstr "Se la sessione corrente è già autenticata, allora la chiamata <literal>Identity.addRole()</literal> avrà l'effetto atteso di concedere immediatamente il ruolo specificato all'utente corrente."

#. Tag: title
#: Security.xml:200
#, no-c-format
msgid "Writing an event observer for security-related events"
msgstr "Scrivere un observer per gli eventi relativi alla sicurezza"

#. Tag: para
#: Security.xml:202
#, no-c-format
msgid "Say for example, that upon a successful login that some user statistics must be updated. This would be done by writing an event observer for the <literal>org.jboss.seam.security.loginSuccessful</literal> event, like this:"
msgstr "Supponiamo, ad esempio, che in seguito ad un accesso concluso con successo debbano essere aggiornate certe statistiche relative all'utente. Questo può essere fatto scrivendo un observer per l'evento <literal>org.jboss.seam.security.loginSuccessful</literal>, come questo:"

#. Tag: programlisting
#: Security.xml:208
#, no-c-format
msgid ""
"<![CDATA[   @In UserStats userStats;\n"
"\n"
"   @Observer(\"org.jboss.seam.security.loginSuccessful\")\n"
"   public void updateUserStats()\n"
"   {\n"
"      userStats.setLastLoginDate(new Date());\n"
"      userStats.incrementLoginCount();\n"
"   }]]>"
msgstr ""
"<![CDATA[   @In UserStats userStats;\n"
"\n"
"   @Observer(\"org.jboss.seam.security.loginSuccessful\")\n"
"   public void updateUserStats()\n"
"   {\n"
"      userStats.setLastLoginDate(new Date());\n"
"      userStats.incrementLoginCount();\n"
"   }]]>"

#. Tag: para
#: Security.xml:210
#, no-c-format
msgid "This observer method can be placed anywhere, even in the Authenticator component itself. You can find more information about security-related events later in this chapter."
msgstr "Questo metodo observer può essere messo ovunque, anche nello stesso componente Authenticator. E' possibile trovare maggiori informazioni sugli eventi relativi alla sicurezza più avanti in questo capitolo."

#. Tag: title
#: Security.xml:219
#, no-c-format
msgid "Writing a login form"
msgstr "Scrivere una form di accesso"

#. Tag: para
#: Security.xml:221
#, no-c-format
msgid "The <literal>credentials</literal> component provides both <literal>username</literal> and <literal>password</literal> properties, catering for the most common authentication scenario. These properties can be bound directly to the username and password fields on a login form. Once these properties are set, calling <literal>identity.login()</literal> will authenticate the user using the provided credentials. Here's an example of a simple login form:"
msgstr "Il componente <literal>credentials</literal> fornisce sia la proprietà <literal>username</literal> che la <literal>password</literal>, soddisfacendo lo scenario di autenticazione più comune. Queste proprietà possono essere collegate direttamente ai campi username e password di una form di accesso. Una volta che queste proprietà sono impostate, chiamando <literal>identity.login()</literal> si otterrà l'autenticazione dell'utente usando le credenziali fornite. Ecco un esempio di una semplice form di accesso: "

#. Tag: programlisting
#: Security.xml:229
#, no-c-format
msgid ""
"<![CDATA[<div>\n"
"    <h:outputLabel for=\"name\" value=\"Username\"/>\n"
"    <h:inputText id=\"name\" value=\"#{credentials.username}\"/>\n"
"</div>\n"
"\n"
"<div>\n"
"    <h:outputLabel for=\"password\" value=\"Password\"/>\n"
"    <h:inputSecret id=\"password\" value=\"#{credentials.password}\"/>\n"
"</div>\n"
"\n"
"<div>\n"
"    <h:commandButton value=\"Login\" action=\"#{identity.login}\"/>\n"
"</div>]]>"
msgstr ""
"<![CDATA[<div>\n"
"    <h:outputLabel for=\"name\" value=\"Nome utente\"/>\n"
"    <h:inputText id=\"name\" value=\"#{credentials.username}\"/>\n"
"</div>\n"
"\n"
"<div>\n"
"    <h:outputLabel for=\"password\" value=\"Password\"/>\n"
"    <h:inputSecret id=\"password\" value=\"#{credentials.password}\"/>\n"
"</div>\n"
"\n"
"<div>\n"
"    <h:commandButton value=\"Accedi\" action=\"#{identity.login}\"/>\n"
"</div>]]>"

#. Tag: para
#: Security.xml:231
#, no-c-format
msgid "Similarly, logging out the user is done by calling <literal>#{identity.logout}</literal>. Calling this action will clear the security state of the currently authenticated user, and invalidate the user's session."
msgstr "Allo stesso modo, l'uscita dell'utente viene fatta chiamando <literal>#{identity.logout}</literal>. La chiamata di questa azione cancellerà lo stato della sicurezza dell'utente correntemente autenticato e invaliderà la sessione dell'utente."

#. Tag: title
#: Security.xml:239
#, no-c-format
msgid "Configuration Summary"
msgstr "Riepilogo della configurazione"

#. Tag: para
#: Security.xml:240
#, no-c-format
msgid "So to sum up, there are the three easy steps to configure authentication:"
msgstr "Riepilogando, ci sono tre semplici passi per configurare l'autenticazione:"

#. Tag: para
#: Security.xml:246
#, no-c-format
msgid "Configure an authentication method in <literal>components.xml</literal>."
msgstr "Configurare un metodo di autenticazione in <literal>components.xml</literal>."

#. Tag: para
#: Security.xml:251
#, no-c-format
msgid "Write an authentication method."
msgstr "Scrivere un metodo di autenticazione."

#. Tag: para
#: Security.xml:256
#, no-c-format
msgid "Write a login form so that the user can authenticate."
msgstr "Scrivere una form di accesso così che l'utente possa autenticarsi."

#. Tag: title
#: Security.xml:265
#, no-c-format
msgid "Remember Me"
msgstr "Ricordami su questo computer"

#. Tag: para
#: Security.xml:267
#, no-c-format
msgid "Seam Security supports the same kind of \"Remember Me\" functionality that is commonly encountered in many online web-based applications. It is actually supported in two different \"flavours\", or modes - the first mode allows the username to be stored in the user's browser as a cookie, and leaves the entering of the password up to the browser (many modern browsers are capable of remembering passwords)."
msgstr "La sicurezza di Seam gestisce lo stesso tipo di funzionalità \"Ricordami su questo computer\" che si incontra comunemente in molte applicazioni basate sull'interfaccia web. In effetti essa è gestita in due diverse \"varietà\" o modalità. La prima modalità consente al nome utente di essere memorizzato nel browser dell'utente come un cookie e lascia che sia il browser ad inserire la password (molti browser moderni sono in grado di ricordare le password). "

#. Tag: para
#: Security.xml:274
#, no-c-format
msgid "The second mode supports the storing of a unique token in a cookie, and allows a user to authenticate automatically upon returning to the site, without having to provide a password."
msgstr "La seconda modalità gestisce la memorizzazione di un identificativo unico in un cookie e consente all'utente di autenticarsi automaticamente non appena ritorna sul sito, senza dover fornire una password."

#. Tag: para
#: Security.xml:280
#, no-c-format
msgid "Automatic client authentication with a persistent cookie stored on the client machine is dangerous. While convenient for users, any cross-site scripting security hole in your website would have dramatically more serious effects than usual. Without the authentication cookie, the only cookie to steal for an attacker with XSS is the cookie of the current session of a user. This means the attack only works when the user has an open session - which should be a short timespan. However, it is much more attractive and dangerous if an attacker has the possibility to steal a persistent Remember Me cookie that allows him to login without authentication, at any time. Note that this all depends on how well you protect your website against XSS attacks - it's up to you to make sure that your website is 100% XSS safe - a non-trival achievement for any website that allows user input to be rendered on a page."
msgstr "L'autenticazione automatica tramite un cookie persistente memorizzato sulla macchina client è pericolosa. Benché sia conveniente per gli utenti, qualsiasi debolezza nella sicurezza che consenta un cross-site scripting nel sito avrebbe effetti drammaticamente più gravi del solito. Senza il cookie di autenticazione, il solo cookie che un malintenzionato può prelevare tramite un attacco XSS è il cookie della sessione corrente dell'utente. Ciò significa che l'attacco funziona solo quando l'utente ha una sessione aperta, ovvero per un intervallo di tempo limitato. Al contrario è molto più allettante e pericoloso se un malintenzionato ha la possibilità di prelevare il cookie relativo alla funzione \"Ricordami su questo computer\", il quale gli consentirebbe di accedere senza autenticazione ogni volta che vuole. Notare che questo dipende anche da quanto è efficace la protezione del sito dagli attacchi XSS. Sta a chi scrive l'applicazione fare in modo che il sito sia sicuro al 100% dagli attacchi XSS, un obiettivo non banale per qualsiasi sito che consente di rappresentare sulle pagine un contenuto scritto dagli utenti."

#. Tag: para
#: Security.xml:291
#, no-c-format
msgid "Browser vendors recognized this issue and introduced a \"Remember Passwords\" feature - today almost all browsers support this. Here, the browser remembers the login username and password for a particular website and domain, and fills out the login form automatically when you don't have an active session with the website. If you as a website designer then offer a convenient login keyboard shortcut, this approach is almost as convenient as a \"Remember Me\" cookie and much safer. Some browsers (e.g. Safari on OS X) even store the login form data in the encrypted global operation system keychain. Or, in a networked environment, the keychain can be transported with the user (between laptop and desktop for example), while browser cookies are usually not synchronized."
msgstr "I produttori di browser hanno riconosciuto questo problema e hanno introdotto la funzione \"Ricorda la password\", oggi disponibile su quasi tutti i browser. In questo caso il browser ricorda il nome utente e la password per un certo sito e dominio, e riempie la form di accesso automaticamente quando non è attiva una sessione con il sito. Se poi il progettista del sito offre una scorciatoia da tastiera conveniente, questo approccio è quasi altrettanto immediato come il cookie \"Ricordami su questo computer\", ma molto più sicuro. Alcuni browser (ad esempio Safari su OS X) memorizzano addirittura i dati delle form di accesso nel portachiavi cifrato di sistema. Oppure, in un ambiente di rete, il portachiavi può essere trasportato dall'utente (tra il portatile e il desktop, ad esempio), mentre i cookie del browser di solito non sono sincronizzati."

#. Tag: para
#: Security.xml:301
#, no-c-format
msgid "To summarize: While everyone is doing it, persistent \"Remember Me\" cookies with automatic authentication are a bad practice and should not be used. Cookies that \"remember\" only the users login name, and fill out the login form with that username as a convenience, are not an issue."
msgstr "In definitiva: benché tutti lo stiano facendo, il cookie \"Ricordami su questo computer\" con l'autenticazione automatica è una cattiva pratica e non dovrebbe essere usata. I cookie che \"ricordano\" solo il nome dell'utente e riempiono la form di accesso con quel nome utente per praticità, non comportano rischi."

#. Tag: para
#: Security.xml:308
#, no-c-format
msgid "To enable the remember me feature for the default (safe, username only) mode, no special configuration is required. In your login form, simply bind the remember me checkbox to <literal>rememberMe.enabled</literal>, like in the following example:"
msgstr "Per abilitare la funzione \"Ricordami su questo computer\" nella modalità di default (quella sicura, con il solo nome utente) non è richiesta alcuna speciale configurazione. Basta collegare un checkbox \"Ricordami su questo computer\" a <literal>rememberMe.enabled</literal> nella form di accesso, come nel seguente esempio:"

#. Tag: programlisting
#: Security.xml:314
#, no-c-format
msgid ""
"<![CDATA[  <div>\n"
"    <h:outputLabel for=\"name\" value=\"User name\"/>\n"
"    <h:inputText id=\"name\" value=\"#{credentials.username}\"/>\n"
"  </div>\n"
"  \n"
"  <div>\n"
"    <h:outputLabel for=\"password\" value=\"Password\"/>\n"
"    <h:inputSecret id=\"password\" value=\"#{credentials.password}\" redisplay=\"true\"/>\n"
"  </div>      \n"
"  \n"
"  <div class=\"loginRow\">\n"
"    <h:outputLabel for=\"rememberMe\" value=\"Remember me\"/>\n"
"    <h:selectBooleanCheckbox id=\"rememberMe\" value=\"#{rememberMe.enabled}\"/>\n"
"  </div>]]>"
msgstr ""
"<![CDATA[  <div>\n"
"    <h:outputLabel for=\"name\" value=\"Nome utente\"/>\n"
"    <h:inputText id=\"name\" value=\"#{credentials.username}\"/>\n"
"  </div>\n"
"  \n"
"  <div>\n"
"    <h:outputLabel for=\"password\" value=\"Password\"/>\n"
"    <h:inputSecret id=\"password\" value=\"#{credentials.password}\" redisplay=\"true\"/>\n"
"  </div>      \n"
"  \n"
"  <div class=\"loginRow\">\n"
"    <h:outputLabel for=\"rememberMe\" value=\"Ricordami su questo computer\"/>\n"
"    <h:selectBooleanCheckbox id=\"rememberMe\" value=\"#{rememberMe.enabled}\"/>\n"
"  </div>]]>"

#. Tag: title
#: Security.xml:317
#, no-c-format
msgid "Token-based Remember-me Authentication"
msgstr "La modalità di autenticazione \"Ricordami su questo computer\" basata sul token"

#. Tag: para
#: Security.xml:319
#, no-c-format
msgid "To use the automatic, token-based mode of the remember me feature, you must first configure a token store. The most common scenario is to store these authentication tokens within a database (which Seam supports), however it is possible to implement your own token store by implementing the <literal>org.jboss.seam.security.TokenStore</literal> interface. This section will assume you will be using the provided <literal>JpaTokenStore</literal> implementation to store authentication tokens inside a database table."
msgstr "Per usare la modalità automatica, attraverso il token, della funzione \"Ricordami su questo computer\", occorre prima configurare la memorizzazione del token. Nello scenario più comune (gestito da Seam) questi token di autenticazione vengono memorizzati nel database, comunque è possibile implementare la propria memorizzazione dei token implementando l'interfaccia <literal>org.jboss.seam.security.TokenStore</literal>. In questo paragrafo si suppone che per la memorizzazione dei token in una tabella del database si stia usando l'implementazione fornita con Seam <literal>JpaTokenStore</literal>."

#. Tag: para
#: Security.xml:327
#, no-c-format
msgid "The first step is to create a new Entity which will contain the tokens. The following example shows a possible structure that you may use:"
msgstr "Il primo passo consiste nel creare una nuova entità che conterrà i token. Il seguente esempio mostra una possibile struttura che può essere usata:"

#. Tag: programlisting
#: Security.xml:332
#, no-c-format
msgid ""
"<![CDATA[@Entity\n"
"public class AuthenticationToken implements Serializable {  \n"
"   private Integer tokenId;\n"
"   private String username;\n"
"   private String value;\n"
"   \n"
"   @Id @GeneratedValue\n"
"   public Integer getTokenId() {\n"
"      return tokenId;\n"
"   }\n"
"   \n"
"   public void setTokenId(Integer tokenId) {\n"
"      this.tokenId = tokenId;\n"
"   }\n"
"   \n"
"   @TokenUsername\n"
"   public String getUsername() {\n"
"      return username;\n"
"   }\n"
"   \n"
"   public void setUsername(String username) {\n"
"      this.username = username;\n"
"   }\n"
"   \n"
"   @TokenValue\n"
"   public String getValue() {\n"
"      return value;\n"
"   }\n"
"   \n"
"   public void setValue(String value) {\n"
"      this.value = value;\n"
"   }\n"
"}]]>"
msgstr ""
"<![CDATA[@Entity\n"
"public class AuthenticationToken implements Serializable {  \n"
"   private Integer tokenId;\n"
"   private String username;\n"
"   private String value;\n"
"   \n"
"   @Id @GeneratedValue\n"
"   public Integer getTokenId() {\n"
"      return tokenId;\n"
"   }\n"
"   \n"
"   public void setTokenId(Integer tokenId) {\n"
"      this.tokenId = tokenId;\n"
"   }\n"
"   \n"
"   @TokenUsername\n"
"   public String getUsername() {\n"
"      return username;\n"
"   }\n"
"   \n"
"   public void setUsername(String username) {\n"
"      this.username = username;\n"
"   }\n"
"   \n"
"   @TokenValue\n"
"   public String getValue() {\n"
"      return value;\n"
"   }\n"
"   \n"
"   public void setValue(String value) {\n"
"      this.value = value;\n"
"   }\n"
"}]]>"

#. Tag: para
#: Security.xml:334
#, no-c-format
msgid "As you can see from this listing, a couple of special annotations, <literal>@TokenUsername</literal> and <literal>@TokenValue</literal> are used to configure the username and token properties of the entity. These annotations are required for the entity that will contain the authentication tokens."
msgstr "Come si può vedere dal listato, vengono usate un paio di annotazioni speciali, <literal>@TokenUsername</literal> e <literal>@TokenValue</literal>, per configurare le proprietà token e nome utente dell'entità. Queste annotazioni sono richieste per l'entità che conterrà i token di autenticazione."

#. Tag: para
#: Security.xml:340
#, no-c-format
msgid "The next step is to configure <literal>JpaTokenStore</literal> to use this entity bean to store and retrieve authentication tokens. This is done in <literal>components.xml</literal> by specifying the <literal>token-class</literal> attribute:"
msgstr "Il passo successivo consiste nel configurare il <literal>JpaTokenStore</literal> per usare questo entity bean per memorizzare e recuperare i token di autenticazione. Ciò viene fatto in <literal>components.xml</literal> specificando l'attributo <literal>token-class</literal>."

#. Tag: programlisting
#: Security.xml:346
#, no-c-format
msgid ""
"<![CDATA[\n"
"  <security:jpa-token-store token-class=\"org.jboss.seam.example.seamspace.AuthenticationToken\"/>        \n"
"        ]]>"
msgstr ""
"<![CDATA[\n"
"  <security:jpa-token-store token-class=\"org.jboss.seam.example.seamspace.AuthenticationToken\"/>        \n"
"        ]]>"

#. Tag: para
#: Security.xml:348
#, no-c-format
msgid "Once this is done, the last thing to do is to configure the <literal>RememberMe</literal> component in <literal>components.xml</literal> also. Its <literal>mode</literal> should be set to <literal>autoLogin</literal>:"
msgstr "Una volta fatto questo, l'ultima cosa da fare è configurare anche il componente <literal>RememberMe</literal> in <literal>components.xml</literal>. La sua proprietà <literal>mode</literal> dovrà essere impostata a <literal>autoLogin</literal>:"

#. Tag: programlisting
#: Security.xml:353
#, no-c-format
msgid ""
"<![CDATA[  <security:remember-me mode=\"autoLogin\"/>        \n"
"        ]]>"
msgstr ""
"<![CDATA[  <security:remember-me mode=\"autoLogin\"/>        \n"
"        ]]>"

#. Tag: para
#: Security.xml:355
#, no-c-format
msgid "That is all that is required - automatic authentication will now occur for users revisiting your site (as long as they check the \"remember me\" checkbox)."
msgstr "Questo è tutto ciò che è necessario. L'autenticazione automatica degli utenti avverrà quando torneranno a visitare il sito (purché abbiano impostato il checkbox \"Ricordami su questo computer\")."

#. Tag: para
#: Security.xml:360
#, no-c-format
msgid "To ensure that users are automatically authenticated when returning to the site, the following section should be placed in components.xml:"
msgstr "Per essere sicuri che gli utenti siano autenticati automaticamente quando tornano sul sito, il seguente codice deve essere posizionato in <literal>components.xml</literal>:"

#. Tag: programlisting
#: Security.xml:365
#, no-c-format
msgid ""
"<![CDATA[  <event type=\"org.jboss.seam.security.notLoggedIn\">\n"
"    <action execute=\"#{redirect.captureCurrentView}\"/>\n"
"    <action execute=\"#{identity.tryLogin()}\"/>\n"
"  </event>\n"
"  <event type=\"org.jboss.seam.security.loginSuccessful\">\n"
"    <action execute=\"#{redirect.returnToCapturedView}\"/>\n"
"  </event>]]>"
msgstr ""
"<![CDATA[  <event type=\"org.jboss.seam.security.notLoggedIn\">\n"
"    <action execute=\"#{redirect.captureCurrentView}\"/>\n"
"    <action execute=\"#{identity.tryLogin()}\"/>\n"
"  </event>\n"
"  <event type=\"org.jboss.seam.security.loginSuccessful\">\n"
"    <action execute=\"#{redirect.returnToCapturedView}\"/>\n"
"  </event>]]>"

#. Tag: title
#: Security.xml:372
#, no-c-format
msgid "Handling Security Exceptions"
msgstr "Gestire le eccezioni della sicurezza"

#. Tag: para
#: Security.xml:374
#, no-c-format
msgid "To prevent users from receiving the default error page in response to a security error, it's recommended that <literal>pages.xml</literal> is configured to redirect security errors to a more \"pretty\" page. The two main types of exceptions thrown by the security API are:"
msgstr "Per prevenire il fatto che gli utenti ricevano la pagina di errore di default in risposta ad un errore di sicurezza, si raccomanda che in <literal>pages.xml</literal> sia configurata una redirezione degli errori di sicurezza ad una pagina più \"carina\". I due principali tipi di eccezione lanciati dalle API della sicurezza sono:"

#. Tag: para
#: Security.xml:382
#, no-c-format
msgid "<literal>NotLoggedInException</literal> - This exception is thrown if the user attempts to access a restricted action or page when they are not logged in."
msgstr "<literal>NotLoggedInException</literal> - Questa eccezione viene lanciata se l'utente tenta di accedere ad un'azione o ad una pagina protetta quando non ha fatto l'accesso."

#. Tag: para
#: Security.xml:388
#, no-c-format
msgid "<literal>AuthorizationException</literal> - This exception is only thrown if the user is already logged in, and they have attempted to access a restricted action or page for which they do not have the necessary privileges."
msgstr "<literal>AuthorizationException</literal> - Questa eccezione viene lanciata solo se l'utente ha già fatto l'accesso e ha tentato di accedere ad un'azione o ad una pagina per la quale non ha i privilegi necessari."

#. Tag: para
#: Security.xml:396
#, no-c-format
msgid "In the case of a <literal>NotLoggedInException</literal>, it is recommended that the user is redirected to either a login or registration page so that they can log in. For an <literal>AuthorizationException</literal>, it may be useful to redirect the user to an error page. Here's an example of a <literal>pages.xml</literal> file that redirects both of these security exceptions:"
msgstr "Nel caso della <literal>NotLoggedInException</literal>, si raccomanda che l'utente venga rediretto o sulla pagina di accesso o su quella di registrazione, così che possa accedere. Per una <literal>AuthorizationException</literal>, può essere utile redirigere l'utente su una pagina di errore. Ecco un esempio di <literal>pages.xml</literal> che redirige entrambe queste eccezioni:"

#. Tag: programlisting
#: Security.xml:403
#, no-c-format
msgid ""
"<![CDATA[<pages>\n"
"\n"
"    ...\n"
"\n"
"    <exception class=\"org.jboss.seam.security.NotLoggedInException\">\n"
"        <redirect view-id=\"/login.xhtml\">\n"
"            <message>You must be logged in to perform this action</message>\n"
"        </redirect>\n"
"    </exception>\n"
"\n"
"    <exception class=\"org.jboss.seam.security.AuthorizationException\">\n"
"        <end-conversation/>\n"
"        <redirect view-id=\"/security_error.xhtml\">\n"
"            <message>You do not have the necessary security privileges to perform this action.</message>\n"
"        </redirect>\n"
"    </exception>\n"
"\n"
"</pages>]]>"
msgstr ""
"<![CDATA[<pages>\n"
"\n"
"    ...\n"
"\n"
"    <exception class=\"org.jboss.seam.security.NotLoggedInException\">\n"
"        <redirect view-id=\"/login.xhtml\">\n"
"            <message>Per eseguire questa operazione devi prima eseguire l'accesso</message>\n"
"        </redirect>\n"
"    </exception>\n"
"\n"
"    <exception class=\"org.jboss.seam.security.AuthorizationException\">\n"
"        <end-conversation/>\n"
"        <redirect view-id=\"/security_error.xhtml\">\n"
"            <message>Non disponi dei privilegi di sicurezza necessari per eseguire questa operazione.</message>\n"
"        </redirect>\n"
"    </exception>\n"
"\n"
"</pages>]]>"

#. Tag: para
#: Security.xml:405
#, no-c-format
msgid "Most web applications require even more sophisticated handling of login redirection, so Seam includes some special functionality for handling this problem."
msgstr "La maggior parte delle applicazioni web richiede una gestione più sofisticata della redirezione sulla pagina di accesso, perciò Seam include alcune funzionalità speciali per gestire questo problema."

#. Tag: title
#: Security.xml:413
#, no-c-format
msgid "Login Redirection"
msgstr "Redirezione alla pagina di accesso"

#. Tag: para
#: Security.xml:415
#, no-c-format
msgid "You can ask Seam to redirect the user to a login screen when an unauthenticated user tries to access a particular view (or wildcarded view id) as follows:"
msgstr "E' possibile chiedere a Seam di redirigere l'utente su una pagina di accesso quando un utente non autenticato tenta di accedere ad una particolare view (o ad una view il cui id corrisponda ad una wildcard), nel modo seguente:"

#. Tag: programlisting
#: Security.xml:420
#, no-c-format
msgid ""
"<![CDATA[<pages login-view-id=\"/login.xhtml\">\n"
"\n"
"    <page view-id=\"/members/*\" login-required=\"true\"/>\n"
"\n"
"    ...\n"
"\n"
"</pages>]]>"
msgstr ""
"<![CDATA[<pages login-view-id=\"/login.xhtml\">\n"
"\n"
"    <page view-id=\"/members/*\" login-required=\"true\"/>\n"
"\n"
"    ...\n"
"\n"
"</pages>]]>"

#. Tag: para
#: Security.xml:423
#, no-c-format
msgid "This is less of a blunt instrument than the exception handler shown above, but should probably be used in conjunction with it."
msgstr "Non è che una banale semplificazione rispetto alla gestione dell'eccezione illustrata prima, ma probabilmente dovrà essere usata insieme ad essa."

#. Tag: para
#: Security.xml:429
#, no-c-format
msgid "After the user logs in, we want to automatically send them back where they came from, so they can retry the action that required logging in. If you add the following event listeners to <literal>components.xml</literal>, attempts to access a restricted view while not logged in will be remembered, so that upon the user successfully logging in they will be redirected to the originally requested view, with any page parameters that existed in the original request."
msgstr "Dopo che l'utente ha eseguito l'accesso, lo si vorrà rimandare automaticamente indietro da dove è venuto, così che potrà riprovare ad eseguire l'azione che richiedeva l'accesso. Se si aggiungono i seguenti listener in <literal>components.xml</literal>, i tentativi di accesso ad una view protetta eseguiti quando non si è fatto l'accesso verranno ricordati così, dopo che l'utente ha eseguito l'accesso, può essere rediretto alla view che aveva originariamente richiesto, compresi tutti i parametri di pagina che esistevano nella richiesta originale."

#. Tag: programlisting
#: Security.xml:438
#, no-c-format
msgid ""
"<![CDATA[<event type=\"org.jboss.seam.security.notLoggedIn\">\n"
"    <action execute=\"#{redirect.captureCurrentView}\"/>\n"
"</event>\n"
"\n"
"<event type=\"org.jboss.seam.security.postAuthenticate\">\n"
"    <action execute=\"#{redirect.returnToCapturedView}\"/>\n"
"</event>]]>"
msgstr ""
"<![CDATA[<event type=\"org.jboss.seam.security.notLoggedIn\">\n"
"    <action execute=\"#{redirect.captureCurrentView}\"/>\n"
"</event>\n"
"\n"
"<event type=\"org.jboss.seam.security.postAuthenticate\">\n"
"    <action execute=\"#{redirect.returnToCapturedView}\"/>\n"
"</event>]]>"

#. Tag: para
#: Security.xml:440
#, no-c-format
msgid "Note that login redirection is implemented as a conversation-scoped mechanism, so don't end the conversation in your <literal>authenticate()</literal> method."
msgstr "Notare che la redirezione dopo l'accesso è implementata con un meccanismo con visibilità sulla conversazione, perciò occorre evitare di terminare la conversazione nel metodo <literal>authenticate()</literal>."

#. Tag: title
#: Security.xml:448
#, no-c-format
msgid "HTTP Authentication"
msgstr "Autenticazione HTTP"

#. Tag: para
#: Security.xml:450
#, no-c-format
msgid "Although not recommended for use unless absolutely necessary, Seam provides means for authenticating using either HTTP Basic or HTTP Digest (RFC 2617) methods. To use either form of authentication, the <literal>authentication-filter</literal> component must be enabled in components.xml:"
msgstr "Benché l'uso non sia raccomandato a meno che non sia assolutamente necessario, Seam fornisce gli strumenti per l'autenticazione in HTTP sia con metodo Basic che Digest (RFC 2617). Per usare entrambe le forme di autenticazione, occorre abilitare il componente <literal>authentication-filter</literal> in <literal>components.xml</literal>:"

#. Tag: programlisting
#: Security.xml:456
#, no-c-format
msgid ""
"<![CDATA[\n"
"  <web:authentication-filter url-pattern=\"*.seam\" auth-type=\"basic\"/>\n"
"      ]]>"
msgstr ""
"<![CDATA[\n"
"  <web:authentication-filter url-pattern=\"*.seam\" auth-type=\"basic\"/>\n"
"      ]]>"

#. Tag: para
#: Security.xml:458
#, no-c-format
msgid "To enable the filter for basic authentication, set <literal>auth-type</literal> to <literal>basic</literal>, or for digest authentication, set it to <literal>digest</literal>. If using digest authentication, the <literal>key</literal> and <literal>realm</literal> must also be set:"
msgstr "Per abilitare il filtro per l'autenticazione Basic impostare <literal>auth-type</literal> a <literal>basic</literal>, oppure per l'autenticazione Digest, impostarlo a <literal>digest</literal>. Se si usa l'autenticazione Digest, occorre impostare anche un valore per <literal>key</literal> e <literal>realm</literal>:"

#. Tag: programlisting
#: Security.xml:464
#, no-c-format
msgid ""
"<![CDATA[\n"
"  <web:authentication-filter url-pattern=\"*.seam\" auth-type=\"digest\" key=\"AA3JK34aSDlkj\" realm=\"My App\"/>\n"
"      ]]>"
msgstr ""
"<![CDATA[\n"
"  <web:authentication-filter url-pattern=\"*.seam\" auth-type=\"digest\" key=\"AA3JK34aSDlkj\" realm=\"La mia Applicazione\"/>\n"
"      ]]>"

#. Tag: para
#: Security.xml:466
#, no-c-format
msgid "The <literal>key</literal> can be any String value. The <literal>realm</literal> is the name of the authentication realm that is presented to the user when they authenticate."
msgstr "<literal>key</literal> può essere un qualunque valore stringa. <literal>realm</literal> è il nome del dominio di autenticazione che viene presentato all'utente quando si autentica."

#. Tag: title
#: Security.xml:472
#, no-c-format
msgid "Writing a Digest Authenticator"
msgstr "Scrivere un autenticatore Digest"

#. Tag: para
#: Security.xml:474
#, no-c-format
msgid "If using digest authentication, your authenticator class should extend the abstract class <literal>org.jboss.seam.security.digest.DigestAuthenticator</literal>, and use the <literal>validatePassword()</literal> method to validate the user's plain text password against the digest request. Here is an example:"
msgstr "Se si usa l'autenticazione Digest, la classe authenticator deve estendere la classe astratta <literal>org.jboss.seam.security.digest.DigestAuthenticator</literal> e usare il metodo <literal>validatePassword()</literal> per validare la password in chiaro dell'utente con la richiesta Digest. Ecco un esempio:"

#. Tag: programlisting
#: Security.xml:481
#, no-c-format
msgid ""
"<![CDATA[\n"
"   public boolean authenticate()\n"
"   {\n"
"      try\n"
"      {\n"
"         User user = (User) entityManager.createQuery(\n"
"            \"from User where username = :username\")\n"
"            .setParameter(\"username\", identity.getUsername())\n"
"            .getSingleResult();\n"
"\n"
"         return validatePassword(user.getPassword());\n"
"      }\n"
"      catch (NoResultException ex)\n"
"      {\n"
"         return false;\n"
"      }\n"
"   }\n"
"        ]]>"
msgstr ""
"<![CDATA[\n"
"   public boolean authenticate()\n"
"   {\n"
"      try\n"
"      {\n"
"         User user = (User) entityManager.createQuery(\n"
"            \"from User where username = :username\")\n"
"            .setParameter(\"username\", identity.getUsername())\n"
"            .getSingleResult();\n"
"\n"
"         return validatePassword(user.getPassword());\n"
"      }\n"
"      catch (NoResultException ex)\n"
"      {\n"
"         return false;\n"
"      }\n"
"   }\n"
"        ]]>"

#. Tag: title
#: Security.xml:487
#, no-c-format
msgid "Advanced Authentication Features"
msgstr "Caratteristiche di autenticazione avanzate"

#. Tag: para
#: Security.xml:489
#, no-c-format
msgid "This section explores some of the advanced features provided by the security API for addressing more complex security requirements."
msgstr "Questo paragrafo esplora alcune delle caratteristiche avanzate fornite dalle API di sicurezza per affrontare requisiti di sicurezza più complessi."

#. Tag: title
#: Security.xml:495
#, no-c-format
msgid "Using your container's JAAS configuration"
msgstr "Utilizzare la configurazione JAAS del container"

#. Tag: para
#: Security.xml:497
#, no-c-format
msgid "If you would rather not use the simplified JAAS configuration provided by the Seam Security API, you may instead delegate to the default system JAAS configuration by providing a <literal>jaas-config-name</literal> property in <literal>components.xml</literal>. For example, if you are using JBoss AS and wish to use the <literal>other</literal> policy (which uses the <literal>UsersRolesLoginModule</literal> login module provided by JBoss AS), then the entry in <literal>components.xml</literal> would look like this:"
msgstr "Se non si vuole usare la configurazione JAAS semplificata fornita dalle API di sicurezza di Seam, è possibile delegare alla configurazione JAAS di default del sistema fornendo una proprietà <literal>jaas-config-name</literal> in <literal>components.xml</literal>. Ad esempio, se si sta usando JBoss AS e si vuole usare la politica <literal>other</literal> (la quale usa il modulo di login <literal>UsersRolesLoginModule</literal> fornito da JBoss AS), allora la voce da mettere in <literal>components.xml</literal> sarà simile a questa:"

#. Tag: programlisting
#: Security.xml:505
#, no-c-format
msgid "<![CDATA[<security:identity jaas-config-name=\"other\"/>]]>"
msgstr "<![CDATA[<security:identity jaas-config-name=\"other\"/>]]>"

#. Tag: para
#: Security.xml:507
#, no-c-format
msgid "Please keep in mind that doing this does not mean that your user will be authenticated in whichever container your Seam application is deployed in. It merely instructs Seam Security to authenticate itself using the configured JAAS security policy."
msgstr "E' il caso di tenere ben presente che facendo in questo modo non significa che l'utente verrà autenticato in qualsiasi container in cui venga eseguita l'applicazione Seam. Questa configurazione istruisce semplicemente la sicurezza di Seam ad autenticarsi usando le politiche di sicurezza JAAS configurate."

#. Tag: title
#: Security.xml:517
#, no-c-format
msgid "Identity Management"
msgstr "Gestione delle identità"

#. Tag: para
#: Security.xml:519
#, no-c-format
msgid "Identity Management provides a standard API for the management of a Seam application's users and roles, regardless of which identity store (database, LDAP, etc) is used on the backend. At the center of the Identity Management API is the <literal>identityManager</literal> component, which provides all the methods for creating, modifying and deleting users, granting and revoking roles, changing passwords, enabling and disabling user accounts, authenticating users and listing users and roles."
msgstr "La gestione delle identità fornisce un'API standard per la gestione degli utenti e dei ruoli di una applicazione Seam, a prescindere da quale dispositivo di memorizzazione delle identità è usato internamente (database, LDAP, ecc). Al centro delle API per la gestione delle identità c'è il componente <literal>identityManager</literal>, il quale fornisce tutti i metodi per creare, modificare e cancellare utenti, concedere e revocare ruoli, cambiare le password, abilitare e disabilitare gli utenti, autenticare gli utenti ed elencare utenti e ruoli."

#. Tag: para
#: Security.xml:527
#, no-c-format
msgid "Before it may be used, the <literal>identityManager</literal> must first be configured with one or more <literal>IdentityStore</literal>s. These components do the actual work of interacting with the backend security provider, whether it be a database, LDAP server, or something else."
msgstr "Prima di essere usato, <literal>identityManager</literal> deve essere configurato con uno o più <literal>IdentityStore</literal>. Questi componenti fanno il vero lavoro di interagire con il fornitore di sicurezza sottostante, sia che si tratti di un database, di un server LDAP o di qualcos'altro."

#. Tag: title
#: Security.xml:543
#, no-c-format
msgid "Configuring IdentityManager"
msgstr "Configurare l'IdentityManager"

#. Tag: para
#: Security.xml:545
#, no-c-format
msgid "The <literal>identityManager</literal> component allows for separate identity stores to be configured for authentication and authorization operations. This means that it is possible for users to be authenticated against one identity store, for example an LDAP directory, yet have their roles loaded from another identity store, such as a relational database."
msgstr "Il componente <literal>identityManager</literal> consente di separare i dispositivi di memorizzazione configurati per le operazioni di autenticazione e di autorizzazione. Ciò significa che è possibile autenticare gli utenti tramite un dispositivo di memorizzazione, ad esempio una directory LDAP, e poi avere i loro ruoli caricati da un altro dispositivo di memorizzazione, come un database relazionale."

#. Tag: para
#: Security.xml:552
#, no-c-format
msgid "Seam provides two <literal>IdentityStore</literal> implementations out of the box; <literal>JpaIdentityStore</literal> uses a relational database to store user and role information, and is the default identity store that is used if nothing is explicitly configured in the <literal>identityManager</literal> component. The other implementation that is provided is <literal>LdapIdentityStore</literal>, which uses an LDAP directory to store users and roles."
msgstr "Seam fornisce due implementazioni <literal>IdentityStore</literal> già pronte. <literal>JpaIdentityStore</literal> usa un database relazionale per memorizzare le informazioni su utenti e ruoli ed è il dispositivo di memorizzazione di identità di default che viene usato se non viene configurato niente in modo esplicito nel componente <literal>identityManager</literal>. L'altra implementazione fornita è <literal>LdapIdentityStore</literal>, che usa una directory LDAP per memorizzare utenti e ruoli."

#. Tag: para
#: Security.xml:560
#, no-c-format
msgid "There are two configurable properties for the <literal>identityManager</literal> component - <literal>identityStore</literal> and <literal>roleIdentityStore</literal>. The value for these properties must be an EL expression referring to a Seam component implementing the <literal>IdentityStore</literal> interface. As already mentioned, if left unconfigured then <literal>JpaIdentityStore</literal> will be assumed by default. If only the <literal>identityStore</literal> property is configured, then the same value will be used for <literal>roleIdentityStore</literal> also. For example, the following entry in <literal>components.xml</literal> will configure <literal>identityManager</literal> to use an <literal>LdapIdentityStore</literal> for both user-related and role-related operations:"
msgstr "Ci sono due proprietà configurabili per il componente <literal>identityManager</literal>, <literal>identityStore</literal> e <literal>roleIdentityStore</literal>. Il valore di queste proprietà deve essere un'espressione EL che fa riferimento ad un componente Seam che implementa l'interfaccia <literal>IdentityStore</literal>. Come già detto, se viene lasciato non configurato allora <literal>JpaIdentityStore</literal> viene assunto come default. Se è configurata solamente la proprietà <literal>identityStore</literal> allora lo stesso valore verrà usato anche per <literal>roleIdentityStore</literal>. Ad esempio la seguente voce in <literal>components.xml</literal> configura <literal>identityManager</literal> per usare un <literal>LdapIdentityStore</literal> sia per le operazioni relative agli utenti che per quelle relative ai ruoli:"

#. Tag: programlisting
#: Security.xml:572
#, no-c-format
msgid ""
"<![CDATA[      \n"
"  <security:identity-manager identity-store=\"#{ldapIdentityStore}\"/>\n"
"      ]]>"
msgstr ""
"<![CDATA[      \n"
"  <security:identity-manager identity-store=\"#{ldapIdentityStore}\"/>\n"
"      ]]>"

#. Tag: para
#: Security.xml:574
#, no-c-format
msgid "The following example configures <literal>identityManager</literal> to use an <literal>LdapIdentityStore</literal> for user-related operations, and <literal>JpaIdentityStore</literal> for role-related operations:"
msgstr "Il seguente esempio configura <literal>identityManager</literal> per usare un <literal>LdapIdentityStore</literal> per le operazioni relative agli utenti e un <literal>JpaIdentityStore</literal> per le operazioni relative ai ruoli."

#. Tag: programlisting
#: Security.xml:579
#, no-c-format
msgid ""
"<![CDATA[      \n"
"  <security:identity-manager \n"
"    identity-store=\"#{ldapIdentityStore}\" \n"
"    role-identity-store=\"#{jpaIdentityStore}\"/>\n"
"      ]]>"
msgstr ""
"<![CDATA[      \n"
"  <security:identity-manager \n"
"    identity-store=\"#{ldapIdentityStore}\" \n"
"    role-identity-store=\"#{jpaIdentityStore}\"/>\n"
"      ]]>"

#. Tag: para
#: Security.xml:581
#, no-c-format
msgid "The following sections explain both of these identity store implementations in greater detail."
msgstr "Il paragrafo seguente spiega con maggiore dettaglio entrambe queste implementazioni di <literal>IdentityStore</literal>."

#. Tag: title
#: Security.xml:588
#, no-c-format
msgid "JpaIdentityStore"
msgstr "JpaIdentityStore"

#. Tag: para
#: Security.xml:590
#, no-c-format
msgid "This identity store allows for users and roles to be stored inside a relational database. It is designed to be as unrestrictive as possible in regards to database schema design, allowing a great deal of flexibility in the underlying table structure. This is achieved through the use of a set of special annotations, allowing entity beans to be configured to store user and role records."
msgstr "Questa memorizzazione delle identità consente agli utenti e ai ruoli di essere memorizzati in un database relazionale. E' progettato per essere il meno restrittivo possibile riguardo allo schema del database, consentendo una grande flessibilità per la struttura delle tabelle sottostanti. Questo si ottiene tramite l'uso di uno speciale insieme di annotazioni, consentendo agli entity bean di essere configurati per memorizzare utenti e ruoli."

#. Tag: title
#: Security.xml:598
#, no-c-format
msgid "Configuring JpaIdentityStore"
msgstr "Configurare JpaIdentityStore"

#. Tag: para
#: Security.xml:600
#, no-c-format
msgid "<literal>JpaIdentityStore</literal> requires that both the <literal>user-class</literal> and <literal>role-class</literal> properties are configured. These properties should refer to the entity classes that are to be used to store both user and role records, respectively. The following example shows the configuration from <literal>components.xml</literal> in the SeamSpace example:"
msgstr "<literal>JpaIdentityStore</literal> richiede che siano configurate sia la proprietà <literal>user-class</literal> che <literal>role-class</literal>. Queste proprietà devono riferirsi a classi entità che servono per memorizzare i record relativi agli utente e ai ruoli, rispettivamente. Il seguente esempio illustra la configurazione di <literal>components.xml</literal> nell'applicazione di esempio SeamSpace:"

#. Tag: programlisting
#: Security.xml:607
#, no-c-format
msgid ""
"<![CDATA[\n"
"  <security:jpa-identity-store \n"
"    user-class=\"org.jboss.seam.example.seamspace.MemberAccount\"\n"
"    role-class=\"org.jboss.seam.example.seamspace.MemberRole\"/>\n"
"        ]]>"
msgstr ""
"<![CDATA[\n"
"  <security:jpa-identity-store \n"
"    user-class=\"org.jboss.seam.example.seamspace.MemberAccount\"\n"
"    role-class=\"org.jboss.seam.example.seamspace.MemberRole\"/>\n"
"        ]]>"

#. Tag: title
#: Security.xml:612
#, no-c-format
msgid "Configuring the Entities"
msgstr "Configurare le entità"

#. Tag: para
#: Security.xml:614
#, no-c-format
msgid "As already mentioned, a set of special annotations are used to configure entity beans for storing users and roles. The following table lists each of the annotations, and their descriptions."
msgstr "Come già menzionato, un apposito insieme di annotazioni viene usato per configurare gli entity bean per la memorizzazione di utenti e ruoli. La seguente tabella elenca ciascuna di queste annotazioni e la relativa descrizione."

#. Tag: title
#: Security.xml:620
#, no-c-format
msgid "User Entity Annotations"
msgstr "Annotazioni per l'entità utente"

#. Tag: para
#: Security.xml:630
#: Security.xml:764
#: Security.xml:3391
#: Security.xml:3554
#, no-c-format
msgid "Annotation"
msgstr "Annotazione"

#. Tag: para
#: Security.xml:633
#: Security.xml:767
#, no-c-format
msgid "Status"
msgstr "Stato"

#. Tag: para
#: Security.xml:636
#: Security.xml:770
#: Security.xml:966
#: Security.xml:1418
#: Security.xml:2147
#: Security.xml:2756
#: Security.xml:3180
#: Security.xml:3397
#: Security.xml:3560
#: Security.xml:3801
#: Security.xml:4238
#, no-c-format
msgid "Description"
msgstr "Descrizione"

#. Tag: literal
#: Security.xml:645
#, no-c-format
msgid "@UserPrincipal"
msgstr "@UserPrincipal"

#. Tag: para
#: Security.xml:649
#: Security.xml:665
#: Security.xml:740
#: Security.xml:783
#, no-c-format
msgid "Required"
msgstr "Richiesta"

#. Tag: para
#: Security.xml:652
#, no-c-format
msgid "This annotation marks the field or method containing the user's username."
msgstr "Questa annotazione contrassegna il campo o il metodo che contiene lo username dell'utente."

#. Tag: literal
#: Security.xml:661
#, no-c-format
msgid "@UserPassword"
msgstr "@UserPassword"

#. Tag: para
#: Security.xml:668
#, no-c-format
msgid "This annotation marks the field or method containing the user's password. It allows a <literal>hash</literal> algorithm to be specified for password hashing. Possible values for <literal>hash</literal> are <literal>md5</literal>, <literal>sha</literal> and <literal>none</literal>. E.g:"
msgstr "Questa annotazione contrassegna il campo o il metodo che contiene la password dell'utente. Consente di specificare un algoritmo di <literal>hash</literal> per nascondere la password. I possibili valori per <literal>hash</literal> sono <literal>md5</literal>, <literal>sha</literal> e <literal>none</literal>. Ad esempio:"

#. Tag: programlisting
#: Security.xml:674
#, no-c-format
msgid ""
"<![CDATA[@UserPassword(hash = \"md5\")\n"
"public String getPasswordHash() { \n"
"  return passwordHash; \n"
"}]]>"
msgstr ""
"<![CDATA[@UserPassword(hash = \"md5\")\n"
"public String getPasswordHash() { \n"
"  return passwordHash; \n"
"}]]>"

#. Tag: para
#: Security.xml:676
#, no-c-format
msgid "If an application requires a hash algorithm that isn't supported natively by Seam, it is possible to extend the <literal>PasswordHash</literal> component to implement other hashing algorithms."
msgstr "Se un'applicazione richiede un algoritmo di hash che non è supportato direttamente da Seam, è possibile estendere il componente <literal>PasswordHash</literal> per implementare un altro algoritmo."

#. Tag: literal
#: Security.xml:687
#, no-c-format
msgid "@UserFirstName"
msgstr "@UserFirstName"

#. Tag: para
#: Security.xml:691
#: Security.xml:707
#: Security.xml:723
#: Security.xml:799
#: Security.xml:815
#, no-c-format
msgid "Optional"
msgstr "Opzionale"

#. Tag: para
#: Security.xml:694
#, no-c-format
msgid "This annotation marks the field or method containing the user's first name."
msgstr "Questa annotazione contrassegna il campo o il metodo contenente il nome dell'utente."

#. Tag: literal
#: Security.xml:703
#, no-c-format
msgid "@UserLastName"
msgstr "@UserLastName"

#. Tag: para
#: Security.xml:710
#, no-c-format
msgid "This annotation marks the field or method containing the user's last name."
msgstr "Questa annotazione contrassegna il campo o il metodo contenente il cognome dell'utente."

#. Tag: literal
#: Security.xml:719
#, no-c-format
msgid "@UserEnabled"
msgstr "@UserEnabled"

#. Tag: para
#: Security.xml:726
#, no-c-format
msgid "This annotation marks the field or method containing the enabled status of the user. This should be a boolean property, and if not present then all user accounts are assumed to be enabled."
msgstr "Questa annotazione contrassegna il campo o il metodo contenente lo stato di abilitazione dell'utente. Questo deve essere una proprietà boolean e, se non presente, tutti gli utenti saranno considerati abilitati."

#. Tag: literal
#: Security.xml:736
#, no-c-format
msgid "@UserRoles"
msgstr "@UserRoles"

#. Tag: para
#: Security.xml:743
#, no-c-format
msgid "This annotation marks the field or method containing the roles of the user. This property will be described in more detail further down."
msgstr "Questa annotazione contrassegna il campo o il metodo contenente i ruoli dell'utente. Questa proprietà verrà descritta in maggiore dettaglio successivamente."

#. Tag: title
#: Security.xml:754
#, no-c-format
msgid "Role Entity Annotations"
msgstr "Annotazioni per l'entità ruolo"

#. Tag: literal
#: Security.xml:779
#, no-c-format
msgid "@RoleName"
msgstr "@RoleName"

#. Tag: para
#: Security.xml:786
#, no-c-format
msgid "This annotation marks the field or method containing the name of the role."
msgstr "Questa annotazione contrassegna il campo o il metodo contenente il nome del ruolo."

#. Tag: literal
#: Security.xml:795
#, no-c-format
msgid "@RoleGroups"
msgstr "@RoleGroups"

#. Tag: para
#: Security.xml:802
#, no-c-format
msgid "This annotation marks the field or method containing the group memberships of the role."
msgstr "Questa annotazione contrassegna il campo o il metodo contenente i gruppi di appartenenza del ruolo."

#. Tag: literal
#: Security.xml:811
#, no-c-format
msgid "@RoleConditional"
msgstr "@RoleConditional"

#. Tag: para
#: Security.xml:818
#, no-c-format
msgid "This annotation marks the field or method indicating whether the role is conditional or not. Conditional roles are explained later in this chapter."
msgstr "Questa annotazione contrassegna il campo o il metodo che indica se il ruolo è condizionale o no. I ruoli condizionali verranno spiegati più avanti in questo capitolo."

#. Tag: title
#: Security.xml:832
#, no-c-format
msgid "Entity Bean Examples"
msgstr "Esempi di entity bean"

#. Tag: para
#: Security.xml:834
#, no-c-format
msgid "As mentioned previously, <literal>JpaIdentityStore</literal> is designed to be as flexible as possible when it comes to the database schema design of your user and role tables. This section looks at a number of possible database schemas that can be used to store user and role records."
msgstr "Come detto precedentemente, <literal>JpaIdentityStore</literal> è progettato per essere il più possibile flessibile per ciò che riguarda lo schema del database delle tabelle degli utenti e dei ruoli. Questo paragrafo esamina una serie di possibili schemi di database che possono essere usati per memorizzare i record degli utenti e dei ruoli."

#. Tag: title
#: Security.xml:841
#, no-c-format
msgid "Minimal schema example"
msgstr "Esempio di uno schema minimo"

#. Tag: para
#: Security.xml:843
#, no-c-format
msgid "In this bare minimal example, a simple user and role table are linked via a many-to-many relationship using a cross-reference table named <literal>UserRoles</literal>."
msgstr "In questo esempio minimale una tabella di utenti e una di ruoli sono legate tramite una relazione molti-a-molti che utilizza una tabella di collegamento chiamata <literal>UserRoles</literal>."

#. Tag: programlisting
#: Security.xml:857
#, no-c-format
msgid ""
"<![CDATA[@Entity\n"
"public class User {\n"
"  private Integer userId;\n"
"  private String username;\n"
"  private String passwordHash;\n"
"  private Set<Role> roles;\n"
"  \n"
"  @Id @GeneratedValue\n"
"  public Integer getUserId() { return userId; }\n"
"  public void setUserId(Integer userId) { this.userId = userId; }\n"
"  \n"
"  @UserPrincipal\n"
"  public String getUsername() { return username; }\n"
"  public void setUsername(String username) { this.username = username; }\n"
"  \n"
"  @UserPassword(hash = \"md5\")\n"
"  public String getPasswordHash() { return passwordHash; }\n"
"  public void setPasswordHash(String passwordHash) { this.passwordHash = passwordHash; }\n"
"  \n"
"  @UserRoles\n"
"  @ManyToMany(targetEntity = Role.class)\n"
"  @JoinTable(name = \"UserRoles\", \n"
"    joinColumns = @JoinColumn(name = \"UserId\"),\n"
"    inverseJoinColumns = @JoinColumn(name = \"RoleId\"))\n"
"  public Set<Role> getRoles() { return roles; }\n"
"  public void setRoles(Set<Role> roles) { this.roles = roles; }\n"
"}]]>"
msgstr ""
"<![CDATA[@Entity\n"
"public class User {\n"
"  private Integer userId;\n"
"  private String username;\n"
"  private String passwordHash;\n"
"  private Set<Role> roles;\n"
"  \n"
"  @Id @GeneratedValue\n"
"  public Integer getUserId() { return userId; }\n"
"  public void setUserId(Integer userId) { this.userId = userId; }\n"
"  \n"
"  @UserPrincipal\n"
"  public String getUsername() { return username; }\n"
"  public void setUsername(String username) { this.username = username; }\n"
"  \n"
"  @UserPassword(hash = \"md5\")\n"
"  public String getPasswordHash() { return passwordHash; }\n"
"  public void setPasswordHash(String passwordHash) { this.passwordHash = passwordHash; }\n"
"  \n"
"  @UserRoles\n"
"  @ManyToMany(targetEntity = Role.class)\n"
"  @JoinTable(name = \"UserRoles\", \n"
"    joinColumns = @JoinColumn(name = \"UserId\"),\n"
"    inverseJoinColumns = @JoinColumn(name = \"RoleId\"))\n"
"  public Set<Role> getRoles() { return roles; }\n"
"  public void setRoles(Set<Role> roles) { this.roles = roles; }\n"
"}]]>"

#. Tag: programlisting
#: Security.xml:858
#, no-c-format
msgid ""
"<![CDATA[@Entity\n"
"public class Role {\n"
"  private Integer roleId;\n"
"  private String rolename;\n"
"  \n"
"  @Id @Generated\n"
"  public Integer getRoleId() { return roleId; }\n"
"  public void setRoleId(Integer roleId) { this.roleId = roleId; }\n"
"  \n"
"  @RoleName\n"
"  public String getRolename() { return rolename; }\n"
"  public void setRolename(String rolename) { this.rolename = rolename; }\n"
"}]]>"
msgstr ""
"<![CDATA[@Entity\n"
"public class Role {\n"
"  private Integer roleId;\n"
"  private String rolename;\n"
"  \n"
"  @Id @Generated\n"
"  public Integer getRoleId() { return roleId; }\n"
"  public void setRoleId(Integer roleId) { this.roleId = roleId; }\n"
"  \n"
"  @RoleName\n"
"  public String getRolename() { return rolename; }\n"
"  public void setRolename(String rolename) { this.rolename = rolename; }\n"
"}]]>"

#. Tag: title
#: Security.xml:863
#, no-c-format
msgid "Complex Schema Example"
msgstr "Esempio di uno schema complesso"

#. Tag: para
#: Security.xml:865
#, no-c-format
msgid "This example builds on the above minimal example by including all of the optional fields, and allowing group memberships for roles."
msgstr "Questo esempio è costruito a partire dall'esempio minimo includendo tutti i campi opzionali e consentendo ai ruoli di appartenere ai gruppi."

#. Tag: programlisting
#: Security.xml:879
#, no-c-format
msgid ""
"<![CDATA[@Entity\n"
"public class User {\n"
"  private Integer userId;\n"
"  private String username;\n"
"  private String passwordHash;\n"
"  private Set<Role> roles;\n"
"  private String firstname;\n"
"  private String lastname;\n"
"  private boolean enabled;\n"
"  \n"
"  @Id @GeneratedValue\n"
"  public Integer getUserId() { return userId; }\n"
"  public void setUserId(Integer userId) { this.userId = userId; }\n"
"  \n"
"  @UserPrincipal\n"
"  public String getUsername() { return username; }\n"
"  public void setUsername(String username) { this.username = username; }\n"
"  \n"
"  @UserPassword(hash = \"md5\")\n"
"  public String getPasswordHash() { return passwordHash; }\n"
"  public void setPasswordHash(String passwordHash) { this.passwordHash = passwordHash; }\n"
"  \n"
"  @UserFirstName\n"
"  public String getFirstname() { return firstname; }\n"
"  public void setFirstname(String firstname) { this.firstname = firstname; }\n"
"  \n"
"  @UserLastName\n"
"  public String getLastname() { return lastname; }\n"
"  public void setLastname(String lastname) { this.lastname = lastname; }\n"
"  \n"
"  @UserEnabled\n"
"  public boolean isEnabled() { return enabled; }\n"
"  public void setEnabled(boolean enabled) { this.enabled = enabled; }\n"
"  \n"
"  @UserRoles\n"
"  @ManyToMany(targetEntity = Role.class)\n"
"  @JoinTable(name = \"UserRoles\", \n"
"    joinColumns = @JoinColumn(name = \"UserId\"),\n"
"    inverseJoinColumns = @JoinColumn(name = \"RoleId\"))\n"
"  public Set<Role> getRoles() { return roles; }\n"
"  public void setRoles(Set<Role> roles) { this.roles = roles; }\n"
"}]]>"
msgstr ""
"<![CDATA[@Entity\n"
"public class User {\n"
"  private Integer userId;\n"
"  private String username;\n"
"  private String passwordHash;\n"
"  private Set<Role> roles;\n"
"  private String firstname;\n"
"  private String lastname;\n"
"  private boolean enabled;\n"
"  \n"
"  @Id @GeneratedValue\n"
"  public Integer getUserId() { return userId; }\n"
"  public void setUserId(Integer userId) { this.userId = userId; }\n"
"  \n"
"  @UserPrincipal\n"
"  public String getUsername() { return username; }\n"
"  public void setUsername(String username) { this.username = username; }\n"
"  \n"
"  @UserPassword(hash = \"md5\")\n"
"  public String getPasswordHash() { return passwordHash; }\n"
"  public void setPasswordHash(String passwordHash) { this.passwordHash = passwordHash; }\n"
"  \n"
"  @UserFirstName\n"
"  public String getFirstname() { return firstname; }\n"
"  public void setFirstname(String firstname) { this.firstname = firstname; }\n"
"  \n"
"  @UserLastName\n"
"  public String getLastname() { return lastname; }\n"
"  public void setLastname(String lastname) { this.lastname = lastname; }\n"
"  \n"
"  @UserEnabled\n"
"  public boolean isEnabled() { return enabled; }\n"
"  public void setEnabled(boolean enabled) { this.enabled = enabled; }\n"
"  \n"
"  @UserRoles\n"
"  @ManyToMany(targetEntity = Role.class)\n"
"  @JoinTable(name = \"UserRoles\", \n"
"    joinColumns = @JoinColumn(name = \"UserId\"),\n"
"    inverseJoinColumns = @JoinColumn(name = \"RoleId\"))\n"
"  public Set<Role> getRoles() { return roles; }\n"
"  public void setRoles(Set<Role> roles) { this.roles = roles; }\n"
"}]]>"

#. Tag: programlisting
#: Security.xml:880
#, no-c-format
msgid ""
"<![CDATA[@Entity\n"
"public class Role {\n"
"  private Integer roleId;\n"
"  private String rolename;\n"
"  private boolean conditional;\n"
"  \n"
"  @Id @Generated\n"
"  public Integer getRoleId() { return roleId; }\n"
"  public void setRoleId(Integer roleId) { this.roleId = roleId; }\n"
"  \n"
"  @RoleName\n"
"  public String getRolename() { return rolename; }\n"
"  public void setRolename(String rolename) { this.rolename = rolename; }\n"
"  \n"
"  @RoleConditional\n"
"  public boolean isConditional() { return conditional; }\n"
"  public void setConditional(boolean conditional) { this.conditional = conditional; }\n"
"  \n"
"  @RoleGroups\n"
"  @ManyToMany(targetEntity = Role.class)\n"
"  @JoinTable(name = \"RoleGroups\", \n"
"    joinColumns = @JoinColumn(name = \"RoleId\"),\n"
"    inverseJoinColumns = @JoinColumn(name = \"GroupId\"))\n"
"  public Set<Role> getGroups() { return groups; }\n"
"  public void setGroups(Set<Role> groups) { this.groups = groups; }  \n"
"  \n"
"}]]>"
msgstr ""
"<![CDATA[@Entity\n"
"public class Role {\n"
"  private Integer roleId;\n"
"  private String rolename;\n"
"  private boolean conditional;\n"
"  \n"
"  @Id @Generated\n"
"  public Integer getRoleId() { return roleId; }\n"
"  public void setRoleId(Integer roleId) { this.roleId = roleId; }\n"
"  \n"
"  @RoleName\n"
"  public String getRolename() { return rolename; }\n"
"  public void setRolename(String rolename) { this.rolename = rolename; }\n"
"  \n"
"  @RoleConditional\n"
"  public boolean isConditional() { return conditional; }\n"
"  public void setConditional(boolean conditional) { this.conditional = conditional; }\n"
"  \n"
"  @RoleGroups\n"
"  @ManyToMany(targetEntity = Role.class)\n"
"  @JoinTable(name = \"RoleGroups\", \n"
"    joinColumns = @JoinColumn(name = \"RoleId\"),\n"
"    inverseJoinColumns = @JoinColumn(name = \"GroupId\"))\n"
"  public Set<Role> getGroups() { return groups; }\n"
"  public void setGroups(Set<Role> groups) { this.groups = groups; }  \n"
"  \n"
"}]]>"

#. Tag: title
#: Security.xml:886
#, no-c-format
msgid "JpaIdentityStore Events"
msgstr "Eventi del JpaIdentityStore"

#. Tag: para
#: Security.xml:888
#, no-c-format
msgid "When using <literal>JpaIdentityStore</literal> as the identity store implementation with <literal>IdentityManager</literal>, a few events are raised as a result of invoking certain <literal>IdentityManager</literal> methods."
msgstr "Quando si usa <literal>JpaIdentityStore</literal> come implementazione della memorizzazione delle identità con <literal>IdentityManager</literal>, alcuni eventi vengono lanciati in corrispondenza dell'invocazione di certi metodi di <literal>IdentityManager</literal>."

#. Tag: title
#: Security.xml:894
#, no-c-format
msgid "JpaIdentityStore.EVENT_PRE_PERSIST_USER"
msgstr "JpaIdentityStore.EVENT_PRE_PERSIST_USER"

#. Tag: para
#: Security.xml:896
#, no-c-format
msgid "This event is raised in response to calling <literal>IdentityManager.createUser()</literal>. Just before the user entity is persisted to the database, this event will be raised passing the entity instance as an event parameter. The entity will be an instance of the <literal>user-class</literal> configured for <literal>JpaIdentityStore</literal>."
msgstr "Questo evento viene lanciato in corrispondenza della chiamata <literal>IdentityManager.createUser()</literal>. Subito prima che l'entità utente sia resa persistente sul database questo evento viene lanciato passando l'istanza dell'entità come parametro dell'evento. L'entità sarà un istanza di <literal>user-class</literal> configurata per <literal>JpaIdentityStore</literal>."

#. Tag: para
#: Security.xml:902
#, no-c-format
msgid "Writing an observer for this event may be useful for setting additional field values on the entity, which aren't set as part of the standard <literal>createUser()</literal> functionality."
msgstr "Scrivere un metodo che osserva questo evento può essere utile per impostare valori addizionali sui campi dell'entità che non vengono impostati nell'ambito delle funzionalità standard di <literal>createUser()</literal>."

#. Tag: title
#: Security.xml:909
#, no-c-format
msgid "JpaIdentityStore.EVENT_USER_CREATED"
msgstr "JpaIdentityStore.EVENT_USER_CREATED"

#. Tag: para
#: Security.xml:911
#, no-c-format
msgid "This event is also raised in response to calling <literal>IdentityManager.createUser()</literal>. However, it is raised after the user entity has already been persisted to the database. Like the <literal>EVENT_PRE_PERSIST_USER</literal> event, it also passes the entity instance as an event parameter. It may be useful to observe this event if you also need to persist other entities that reference the user entity, for example contact detail records or other user-specific data."
msgstr "Anche questo evento viene lanciato in corrispondenza di <literal>IdentityMananger.createUser()</literal>. Però viene lanciato dopo che l'entità utente è già stata resa persistente sul database. Come per l'evento <literal>EVENT_PRE_PERSIST_USER</literal>, anche questo passa l'istanza dell'entità come un parametro dell'evento. Può essere utile osservare questo evento se c'è bisogno di rendere persistenti altre entità che fanno riferimento all'entità utente, ad esempio informazioni di dettaglio del contatto o altri dati specifici dell'utente."

#. Tag: title
#: Security.xml:921
#, no-c-format
msgid "JpaIdentityStore.EVENT_USER_AUTHENTICATED"
msgstr "JpaIdentityStore.EVENT_USER_AUTHENTICATED"

#. Tag: para
#: Security.xml:923
#, no-c-format
msgid "This event is raised when calling <literal>IdentityManager.authenticate()</literal>. It passes the user entity instance as the event parameter, and is useful for reading additional properties from the user entity that is being authenticated."
msgstr "Questo evento viene lanciato quando viene chiamata <literal>IdentityManager.authenticate()</literal>. Passa l'istanza dell'entità utente come parametro dell'evento e risulta utile per leggere proprietà aggiuntive dall'entità dell'utente che è stato autenticato."

#. Tag: title
#: Security.xml:933
#, no-c-format
msgid "LdapIdentityStore"
msgstr "LdapIdentityStore"

#. Tag: para
#: Security.xml:935
#, no-c-format
msgid "This identity store implementation is designed for working with user records stored in an LDAP directory. It is very highly configurable, allowing great flexibility in how both users and roles are stored in the directory. The following sections describe the configuration options for this identity store, and provide some configuration examples."
msgstr "Questa implementazione della memorizzazione delle identità è progettata per funzionare quando le informazioni sugli utenti sono memorizzate in una directory LDAP. E' molto configurabile consentendo una grande flessibilità sul modo in cui utenti e ruoli sono memorizzati nella directory. ll seguente paragrafo descrive le opzioni di configurazione per questa implementazione e fornisce alcuni esempi di configurazione."

#. Tag: title
#: Security.xml:942
#, no-c-format
msgid "Configuring LdapIdentityStore"
msgstr "Configurare LdapIdentityStore"

#. Tag: para
#: Security.xml:944
#, no-c-format
msgid "The following table describes the available properties that can be configured in <literal>components.xml</literal> for <literal>LdapIdentityStore</literal>."
msgstr "La seguente tabella descrive le proprietà disponibili che possono essere configurate in <literal>components.xml</literal> per <literal>LdapIdentityStore</literal>."

#. Tag: title
#: Security.xml:950
#, no-c-format
msgid "LdapIdentityStore Configuration Properties"
msgstr "Proprietà di configurazione di LdapIdentityStore"

#. Tag: para
#: Security.xml:960
#, no-c-format
msgid "Property"
msgstr "Proprietà"

#. Tag: para
#: Security.xml:963
#, no-c-format
msgid "Default Value"
msgstr "Valore di default"

#. Tag: literal
#: Security.xml:975
#, no-c-format
msgid "server-address"
msgstr "server-address"

#. Tag: literal
#: Security.xml:979
#, no-c-format
msgid "localhost"
msgstr "localhost"

#. Tag: para
#: Security.xml:982
#, no-c-format
msgid "The address of the LDAP server."
msgstr "L'indirizzo del server LDAP"

#. Tag: literal
#: Security.xml:991
#, no-c-format
msgid "server-port"
msgstr "server-port"

#. Tag: literal
#: Security.xml:995
#, no-c-format
msgid "<literal>389</literal>"
msgstr "<literal>389</literal>"

#. Tag: para
#: Security.xml:998
#, no-c-format
msgid "The port number that the LDAP server is listening on."
msgstr "Il numero di porta su cui il server LDAP è in ascolto."

#. Tag: literal
#: Security.xml:1007
#, no-c-format
msgid "user-context-DN"
msgstr "user-context-DN"

#. Tag: literal
#: Security.xml:1011
#, no-c-format
msgid "ou=Person,dc=acme,dc=com"
msgstr "ou=Person,dc=acme,dc=com"

#. Tag: para
#: Security.xml:1014
#, no-c-format
msgid "The Distinguished Name (DN) of the context containing user records."
msgstr "Il Distinguished Name (DN) del contesto contenente le informazioni sugli utenti."

#. Tag: literal
#: Security.xml:1023
#, no-c-format
msgid "user-DN-prefix"
msgstr "user-DN-prefix"

#. Tag: literal
#: Security.xml:1027
#, no-c-format
msgid "uid="
msgstr "uid="

#. Tag: para
#: Security.xml:1030
#, no-c-format
msgid "This value is prefixed to the front of the username to locate the user's record."
msgstr "Questo valore è usato come prefisso anteponendolo al nome utente durante la ricerca delle informazioni sull'utente."

#. Tag: literal
#: Security.xml:1039
#, no-c-format
msgid "user-DN-suffix"
msgstr "user-DN-suffix"

#. Tag: literal
#: Security.xml:1043
#, no-c-format
msgid ",ou=Person,dc=acme,dc=com"
msgstr ",ou=Person,dc=acme,dc=com"

#. Tag: para
#: Security.xml:1046
#, no-c-format
msgid "This value is appended to the end of the username to locate the user's record."
msgstr "Questo valore è aggiunto alla fine del nome utente per ricercare le informazioni sull'utente."

#. Tag: literal
#: Security.xml:1055
#, no-c-format
msgid "role-context-DN"
msgstr "role-context-DN"

#. Tag: literal
#: Security.xml:1059
#, no-c-format
msgid "ou=Role,dc=acme,dc=com"
msgstr "ou=Role,dc=acme,dc=com"

#. Tag: para
#: Security.xml:1062
#, no-c-format
msgid "The DN of the context containing role records."
msgstr "Il DN del contesto contenente le informazioni sui ruoli."

#. Tag: literal
#: Security.xml:1071
#, no-c-format
msgid "role-DN-prefix"
msgstr "role-DN-prefix"

#. Tag: literal
#: Security.xml:1075
#, no-c-format
msgid "<literal>cn=</literal>"
msgstr "<literal>cn=</literal>"

#. Tag: para
#: Security.xml:1078
#, no-c-format
msgid "This value is prefixed to the front of the role name to form the DN for locating the role record."
msgstr "Questo valore è usato come prefisso anteponendolo al nome del ruolo per formare il DN nella ricerca delle informazioni sul ruolo."

#. Tag: literal
#: Security.xml:1088
#, no-c-format
msgid "role-DN-suffix"
msgstr "role-DN-suffix"

#. Tag: literal
#: Security.xml:1092
#, no-c-format
msgid ",ou=Roles,dc=acme,dc=com"
msgstr ",ou=Roles,dc=acme,dc=com"

#. Tag: para
#: Security.xml:1095
#, no-c-format
msgid "This value is appended to the role name to form the DN for locating the role record."
msgstr "Questo valore è aggiunto al nome del ruolo per formare il DN nella ricerca delle informazioni sul ruolo."

#. Tag: literal
#: Security.xml:1104
#, no-c-format
msgid "bind-DN"
msgstr "bind-DN"

#. Tag: literal
#: Security.xml:1108
#, no-c-format
msgid "cn=Manager,dc=acme,dc=com"
msgstr "cn=Manager,dc=acme,dc=com"

#. Tag: para
#: Security.xml:1111
#, no-c-format
msgid "This is the context used to bind to the LDAP server."
msgstr "Questo è il contesto usato per collegare il server LDAP."

#. Tag: literal
#: Security.xml:1120
#, no-c-format
msgid "bind-credentials"
msgstr "bind-credentials"

#. Tag: literal
#: Security.xml:1124
#, no-c-format
msgid "secret"
msgstr "secret"

#. Tag: para
#: Security.xml:1127
#, no-c-format
msgid "These are the credentials (the password) used to bind to the LDAP server."
msgstr "Queste sono le credenziali (la password) usate per collegare il server LDAP."

#. Tag: literal
#: Security.xml:1136
#, no-c-format
msgid "user-role-attribute"
msgstr "user-role-attribute"

#. Tag: literal
#: Security.xml:1140
#, no-c-format
msgid "roles"
msgstr "roles"

#. Tag: para
#: Security.xml:1143
#, no-c-format
msgid "This is the name of the attribute of the user record that contains the list of roles that the user is a member of."
msgstr "Questo è il nome dell'attributo sulle informazioni dell'utente che contiene la lista dei ruoli di cui l'utente è membro."

#. Tag: literal
#: Security.xml:1153
#, no-c-format
msgid "role-attribute-is-DN"
msgstr "role-attribute-is-DN"

#. Tag: literal
#: Security.xml:1157
#, no-c-format
msgid "true"
msgstr "true"

#. Tag: para
#: Security.xml:1160
#, no-c-format
msgid "This boolean property indicates whether the role attribute of the user record is itself a distinguished name."
msgstr "Questa proprietà boolean indica se l'attributo del ruolo nelle informazioni dell'utente è esso stesso un Distinguished Name."

#. Tag: literal
#: Security.xml:1170
#, no-c-format
msgid "user-name-attribute"
msgstr "user-name-attribute"

#. Tag: literal
#: Security.xml:1174
#, no-c-format
msgid "<literal>uid</literal>"
msgstr "<literal>uid</literal>"

#. Tag: para
#: Security.xml:1177
#, no-c-format
msgid "Indicates which attribute of the user record contains the username."
msgstr "Indica quale attributo delle informazioni sull'utente contiene il nome utente."

#. Tag: literal
#: Security.xml:1186
#, no-c-format
msgid "user-password-attribute"
msgstr "user-password-attribute"

#. Tag: literal
#: Security.xml:1190
#, no-c-format
msgid "userPassword"
msgstr "userPassword"

#. Tag: para
#: Security.xml:1193
#, no-c-format
msgid "Indicates which attribute of the user record contains the user's password."
msgstr "Indica quale attributo nelle informazioni sull'utente contiene la password dell'utente."

#. Tag: literal
#: Security.xml:1202
#, no-c-format
msgid "first-name-attribute"
msgstr "first-name-attribute"

#. Tag: literal
#: Security.xml:1206
#: Security.xml:1254
#, no-c-format
msgid "null"
msgstr "null"

#. Tag: para
#: Security.xml:1209
#, no-c-format
msgid "Indicates which attribute of the user record contains the user's first name."
msgstr "Indica quale attributo nelle informazioni sull'utente contiene il nome proprio dell'utente."

#. Tag: literal
#: Security.xml:1218
#, no-c-format
msgid "last-name-attribute"
msgstr "last-name-attribute"

#. Tag: literal
#: Security.xml:1222
#, no-c-format
msgid "<literal>sn</literal>"
msgstr "<literal>sn</literal>"

#. Tag: para
#: Security.xml:1225
#, no-c-format
msgid "Indicates which attribute of the user record contains the user's last name."
msgstr "Indica quale attributo nelle informazioni sull'utente contiene il cognome dell'utente."

#. Tag: literal
#: Security.xml:1234
#, no-c-format
msgid "full-name-attribute"
msgstr "full-name-attribute"

#. Tag: literal
#: Security.xml:1238
#: Security.xml:1270
#, no-c-format
msgid "<literal>cn</literal>"
msgstr "<literal>cn</literal>"

#. Tag: para
#: Security.xml:1241
#, no-c-format
msgid "Indicates which attribute of the user record contains the user's full (common) name."
msgstr "Indica quale attributo nelle informazioni sull'utente contiene il nome per esteso dell'utente."

#. Tag: literal
#: Security.xml:1250
#, no-c-format
msgid "enabled-attribute"
msgstr "enabled-attribute"

#. Tag: para
#: Security.xml:1257
#, no-c-format
msgid "Indicates which attribute of the user record determines whether the user is enabled."
msgstr "Indica quale attributo nelle informazioni sull'utente determina se l'utente è abilitato."

#. Tag: literal
#: Security.xml:1266
#, no-c-format
msgid "role-name-attribute"
msgstr "role-name-attribute"

#. Tag: para
#: Security.xml:1273
#, no-c-format
msgid "Indicates which attribute of the role record contains the name of the role."
msgstr "Indica quale attributo nell'informazioni sul ruolo contiene il nome del ruolo."

#. Tag: literal
#: Security.xml:1282
#, no-c-format
msgid "object-class-attribute"
msgstr "object-class-attribute"

#. Tag: literal
#: Security.xml:1286
#, no-c-format
msgid "objectClass"
msgstr "objectClass"

#. Tag: para
#: Security.xml:1289
#, no-c-format
msgid "Indicates which attribute determines the class of an object in the directory."
msgstr "Indica quale attributo determina la classe di un oggetto nella directory."

#. Tag: literal
#: Security.xml:1298
#, no-c-format
msgid "role-object-classes"
msgstr "role-object-classes"

#. Tag: literal
#: Security.xml:1302
#, no-c-format
msgid "organizationalRole"
msgstr "organizationalRole"

#. Tag: para
#: Security.xml:1305
#, no-c-format
msgid "An array of the object classes that new role records should be created as."
msgstr "Un elenco di classi di oggetto con cui devono essere create le informazioni su un nuovo ruolo."

#. Tag: literal
#: Security.xml:1314
#, no-c-format
msgid "user-object-classes"
msgstr "user-object-classes"

#. Tag: literal
#: Security.xml:1318
#, no-c-format
msgid "person,uidObject"
msgstr "person.uidObject"

#. Tag: para
#: Security.xml:1321
#, no-c-format
msgid "An array of the object classes that new user records should be created as."
msgstr "Un elenco di classi di oggetto con cui devono essere create le informazioni su un nuovo utente."

#. Tag: title
#: Security.xml:1333
#, no-c-format
msgid "LdapIdentityStore Configuration Example"
msgstr "Esempio di configurazione di LdapIdentityStore"

#. Tag: para
#: Security.xml:1335
#, no-c-format
msgid "The following configuration example shows how <literal>LdapIdentityStore</literal> may be configured for an LDAP directory running on fictional host <literal>directory.mycompany.com</literal>. The users are stored within this directory under the context <literal>ou=Person,dc=mycompany,dc=com</literal>, and are identified using the <literal>uid</literal> attribute (which corresponds to their username). Roles are stored in their own context, <literal>ou=Roles,dc=mycompany,dc=com</literal> and referenced from the user's entry via the <literal>roles</literal> attribute. Role entries are identified by their common name (the <literal>cn</literal> attribute) , which corresponds to the role name. In this example, users may be disabled by setting the value of their <literal>enabled</literal> attribute to false."
msgstr "La seguente configurazione di esempio mostra come <literal>LdapIdentityStore</literal> può essere configurato per una directory LDAP sul sistema immaginario <literal>directory.mycompany.com</literal>. Gli utenti sono memorizzati all'interno di questa directory sotto il contesto <literal>ou=Person,dc=mycompany,dc=com</literal> e sono identificati usando l'attributo <literal>uid</literal> (che corrisponde al loro nome utente). I ruoli sono memorizzati nel loro contesto, <literal>ou=Roles,dc=mycompany,dc=com</literal> e referenziati dalla voce dell'utente tramite l'attributo <literal>roles</literal>. Le voci dei ruoli sono identificate tramite il loro common name (l'attributo <literal>cn</literal>), che corrisponde al nome del ruolo. In questo esempio gli utenti possono essere disabilitati impostando il valoro del loro attributo <literal>enabled</literal> a false."

#. Tag: programlisting
#: Security.xml:1346
#, no-c-format
msgid ""
"<![CDATA[\n"
"  <security:ldap-identity-store\n"
"    server-address=\"directory.mycompany.com\"\n"
"    bind-DN=\"cn=Manager,dc=mycompany,dc=com\"\n"
"    bind-credentials=\"secret\"\n"
"    user-DN-prefix=\"uid=\"\n"
"    user-DN-suffix=\",ou=Person,dc=mycompany,dc=com\"\n"
"    role-DN-prefix=\"cn=\"\n"
"    role-DN-suffix=\",ou=Roles,dc=mycompany,dc=com\"\n"
"    user-context-DN=\"ou=Person,dc=mycompany,dc=com\"\n"
"    role-context-DN=\"ou=Roles,dc=mycompany,dc=com\"\n"
"    user-role-attribute=\"roles\"\n"
"    role-name-attribute=\"cn\"\n"
"    user-object-classes=\"person,uidObject\"\n"
"    enabled-attribute=\"enabled\"\n"
"    />]]>"
msgstr ""
"<![CDATA[\n"
"  <security:ldap-identity-store\n"
"    server-address=\"directory.mycompany.com\"\n"
"    bind-DN=\"cn=Manager,dc=mycompany,dc=com\"\n"
"    bind-credentials=\"secret\"\n"
"    user-DN-prefix=\"uid=\"\n"
"    user-DN-suffix=\",ou=Person,dc=mycompany,dc=com\"\n"
"    role-DN-prefix=\"cn=\"\n"
"    role-DN-suffix=\",ou=Roles,dc=mycompany,dc=com\"\n"
"    user-context-DN=\"ou=Person,dc=mycompany,dc=com\"\n"
"    role-context-DN=\"ou=Roles,dc=mycompany,dc=com\"\n"
"    user-role-attribute=\"roles\"\n"
"    role-name-attribute=\"cn\"\n"
"    user-object-classes=\"person,uidObject\"\n"
"    enabled-attribute=\"enabled\"\n"
"    />]]>"

#. Tag: title
#: Security.xml:1353
#, no-c-format
msgid "Writing your own IdentityStore"
msgstr "Scrivere il proprio IdentityStore"

#. Tag: para
#: Security.xml:1355
#, no-c-format
msgid "Writing your own identity store implementation allows you to authenticate and perform identity management operations against security providers that aren't supported out of the box by Seam. Only a single class is required to achieve this, and it must implement the <literal>org.jboss.seam.security.management.IdentityStore</literal> interface."
msgstr "Scrivere la propria implementazione della memorizzazione delle identità consente di autenticare ed eseguire le operazioni di gestione delle identità su fornitori di sicurezza che non sono gestiti da Seam così com'è. Per ottenere ciò è richiesta una sola classe ed essa deve implementare l'interfaccia <literal>org.jboss.seam.security.management.IdentityStore</literal>."

#. Tag: para
#: Security.xml:1362
#, no-c-format
msgid "Please refer to the JavaDoc for <literal>IdentityStore</literal> for a description of the methods that must be implemented."
msgstr "Fare riferimento al JavaDoc di <literal>IdentityStore</literal> per una descrizione dei metodi che devono essere implementati."

#. Tag: title
#: Security.xml:1370
#, no-c-format
msgid "Authentication with Identity Management"
msgstr "L'autenticazione con la gestione delle identità"

#. Tag: para
#: Security.xml:1372
#, no-c-format
msgid "If you are using the Identity Management features in your Seam application, then it is not required to provide an authenticator component (see previous Authentication section) to enable authentication. Simply omit the <literal>authenticator-method</literal> from the <literal>identity</literal> configuration in <literal>components.xml</literal>, and the <literal>SeamLoginModule</literal> will by default use <literal>IdentityManager</literal> to authenticate your application's users, without any special configuration required."
msgstr "Se in un'applicazione Seam si stanno usando le funzioni di gestione delle identità, allora non è richiesto di fornire un componente <literal>authenticator</literal> (vedi il precedente paragrafo Autenticazione) per abilitare l'autenticazione. Basta omettere <literal>authenticator-method</literal> dalla configurazione di <literal>identity</literal> in <literal>components.xml</literal> e il <literal>SeamLoginModule</literal> userà di default <literal>IdentityManager</literal> per autenticare gli utenti dell'applicazione, senza nessuna configurazione speciale."

#. Tag: title
#: Security.xml:1383
#, no-c-format
msgid "Using IdentityManager"
msgstr "Usare IdentityManager"

#. Tag: para
#: Security.xml:1385
#, no-c-format
msgid "The <literal>IdentityManager</literal> can be accessed either by injecting it into your Seam component as follows:"
msgstr "<literal>IdentityManager</literal> può essere utilizzato sia iniettandolo in un componente Seam come di seguito:"

#. Tag: programlisting
#: Security.xml:1390
#, no-c-format
msgid "<![CDATA[  @In IdentityManager identityManager;]]>"
msgstr "<![CDATA[  @In IdentityManager identityManager;]]>"

#. Tag: para
#: Security.xml:1392
#, no-c-format
msgid "or by accessing it through its static <literal>instance()</literal> method:"
msgstr "sia accedendo ad esso tramite il suo metodo statico <literal>instance()</literal>:"

#. Tag: programlisting
#: Security.xml:1396
#, no-c-format
msgid "<![CDATA[  IdentityManager identityManager = IdentityManager.instance();]]>"
msgstr "<![CDATA[  IdentityManager identityManager = IdentityManager.instance();]]>"

#. Tag: para
#: Security.xml:1398
#, no-c-format
msgid "The following table describes <literal>IdentityManager</literal>'s API methods:"
msgstr "La seguente tabella descrive i metodi di API per <literal>IdentityManager</literal>:"

#. Tag: title
#: Security.xml:1403
#, no-c-format
msgid "Identity Management API"
msgstr "API per la gestione delle identità"

#. Tag: para
#: Security.xml:1412
#: Security.xml:1828
#: Security.xml:2753
#: Security.xml:3177
#: Security.xml:3798
#: Security.xml:3967
#, no-c-format
msgid "Method"
msgstr "Metodo"

#. Tag: para
#: Security.xml:1415
#, no-c-format
msgid "Returns"
msgstr "Valore restituito"

#. Tag: literal
#: Security.xml:1428
#, no-c-format
msgid "createUser(String name, String password)"
msgstr "createUser(String name, String password)"

#. Tag: literal
#: Security.xml:1433
#: Security.xml:1452
#: Security.xml:1471
#: Security.xml:1490
#: Security.xml:1509
#: Security.xml:1529
#: Security.xml:1548
#: Security.xml:1567
#: Security.xml:1586
#: Security.xml:1606
#: Security.xml:1626
#: Security.xml:1740
#: Security.xml:1762
#: Security.xml:1780
#: Security.xml:2766
#: Security.xml:3248
#: Security.xml:3267
#: Security.xml:3286
#: Security.xml:3304
#: Security.xml:3849
#: Security.xml:3868
#: Security.xml:3887
#: Security.xml:3906
#, no-c-format
msgid "boolean"
msgstr "boolean"

#. Tag: para
#: Security.xml:1437
#, no-c-format
msgid "Creates a new user account, with the specified name and password. Returns <literal>true</literal> if successful, or <literal>false</literal> if not."
msgstr "Crea un nuovo utente con il nome e la password specificate. Restituisce <literal>true</literal> se l'operazione si è conclusa con successo, oppure <literal>false</literal>."

#. Tag: literal
#: Security.xml:1447
#, no-c-format
msgid "deleteUser(String name)"
msgstr "deleteUser(String name)"

#. Tag: para
#: Security.xml:1456
#, no-c-format
msgid "Deletes the user account with the specified name. Returns <literal>true</literal> if successful, or <literal>false</literal> if not."
msgstr "Elimina le informazioni dell'utente con il nome specificato. Restituisce <literal>true</literal> se l'operazione si è conclusa con successo, oppure <literal>false</literal>."

#. Tag: literal
#: Security.xml:1466
#, no-c-format
msgid "createRole(String role)"
msgstr "createRole(String role)"

#. Tag: para
#: Security.xml:1475
#, no-c-format
msgid "Creates a new role, with the specified name. Returns <literal>true</literal> if successful, or <literal>false</literal> if not."
msgstr "Crea un nuovo ruolo con il nome specificato. Restituisce <literal>true</literal> se l'operazione si è conclusa con successo, oppure <literal>false</literal>."

#. Tag: literal
#: Security.xml:1485
#, no-c-format
msgid "deleteRole(String name)"
msgstr "deleteRole(String name)"

#. Tag: para
#: Security.xml:1494
#, no-c-format
msgid "Deletes the role with the specified name. Returns <literal>true</literal> if successful, or <literal>false</literal> if not."
msgstr "Elimina il ruolo con il nome specificato. Restituisce <literal>true</literal> se l'operazione si è conclusa con successo, oppure <literal>false</literal>."

#. Tag: literal
#: Security.xml:1504
#, no-c-format
msgid "enableUser(String name)"
msgstr "enableUser(String name)"

#. Tag: para
#: Security.xml:1513
#, no-c-format
msgid "Enables the user account with the specified name. Accounts that are not enabled are not able to authenticate. Returns <literal>true</literal> if successful, or <literal>false</literal> if not."
msgstr "Abilita l'utente con il nome specificato. Gli utenti che non sono abilitati non sono in grado di autenticarsi. Restituisce <literal>true</literal> se l'operazione si è conclusa con successo, oppure <literal>false</literal>."

#. Tag: literal
#: Security.xml:1524
#, no-c-format
msgid "disableUser(String name)"
msgstr "disableUser(String name)"

#. Tag: para
#: Security.xml:1533
#, no-c-format
msgid "Disables the user account with the specified name. Returns <literal>true</literal> if successful, or <literal>false</literal> if not."
msgstr "Disabilita l'utente con il nome specificato. Restituisce <literal>true</literal> se l'operazione si è conclusa con successo, oppure <literal>false</literal>."

#. Tag: literal
#: Security.xml:1543
#, no-c-format
msgid "changePassword(String name, String password)"
msgstr "changePassword(String name, String password)"

#. Tag: para
#: Security.xml:1552
#, no-c-format
msgid "Changes the password for the user account with the specified name. Returns <literal>true</literal> if successful, or <literal>false</literal> if not."
msgstr "Modifica la password dell'utente con il nome specificato. Restituisce <literal>true</literal> se l'operazione si è conclusa con successo, oppure <literal>false</literal>."

#. Tag: literal
#: Security.xml:1562
#, no-c-format
msgid "isUserEnabled(String name)"
msgstr "isUserEnabled(String name)"

#. Tag: para
#: Security.xml:1571
#, no-c-format
msgid "Returns <literal>true</literal> if the specified user account is enabled, or <literal>false</literal> if it isn't."
msgstr "Restituisce <literal>true</literal> se l'utente specificato è abilitato, oppure <literal>false</literal> se non lo è."

#. Tag: literal
#: Security.xml:1581
#, no-c-format
msgid "grantRole(String name, String role)"
msgstr "grantRole(String name, String role)"

#. Tag: para
#: Security.xml:1590
#, no-c-format
msgid "Grants the specified role to the specified user or role. The role must already exist for it to be granted. Returns <literal>true</literal> if the role is successfully granted, or <literal>false</literal> if it is already granted to the user."
msgstr "Concede il ruolo specificato all'utente o al ruolo. Il ruolo deve già esistere per essere concesso. Restituisce <literal>true</literal> se il ruolo è stato concesso, oppure <literal>false</literal> se era già stato concesso all'utente."

#. Tag: literal
#: Security.xml:1601
#, no-c-format
msgid "revokeRole(String name, String role)"
msgstr "revokeRole(String name, String role)"

#. Tag: para
#: Security.xml:1610
#, no-c-format
msgid "Revokes the specified role from the specified user or role. Returns <literal>true</literal> if the specified user is a member of the role and it is successfully revoked, or <literal>false</literal> if the user is not a member of the role."
msgstr "Revoca il ruolo specificato all'utente o al ruolo. Restituisce <literal>true</literal> se l'utente specificato era membro del ruolo e questo è stato revocato con successo, oppure <literal>false</literal> se l'utente non è un membro del ruolo."

#. Tag: literal
#: Security.xml:1621
#, no-c-format
msgid "userExists(String name)"
msgstr "userExists(String name)"

#. Tag: para
#: Security.xml:1630
#, no-c-format
msgid "Returns <literal>true</literal> if the specified user exists, or <literal>false</literal> if it doesn't."
msgstr "Restituisce <literal>true</literal> se l'utente specificato esiste, oppure <literal>false</literal> se non esiste."

#. Tag: literal
#: Security.xml:1640
#: Security.xml:2041
#, no-c-format
msgid "listUsers()"
msgstr "listUsers()"

#. Tag: literal
#: Security.xml:1645
#: Security.xml:1663
#: Security.xml:1681
#: Security.xml:1699
#: Security.xml:1717
#: Security.xml:1798
#, no-c-format
msgid "List"
msgstr "listUsers(String filter)"

#. Tag: para
#: Security.xml:1649
#, no-c-format
msgid "Returns a list of all user names, sorted in alpha-numeric order."
msgstr "Restituisce una lista di tutti i nomi utente in ordine alfanumerico."

#. Tag: literal
#: Security.xml:1658
#, no-c-format
msgid "listUsers(String filter)"
msgstr "listUsers(String filter)"

#. Tag: para
#: Security.xml:1667
#, no-c-format
msgid "Returns a list of all user names filtered by the specified filter parameter, sorted in alpha-numeric order."
msgstr "Restituisce una lista di tutti i nomi utente filtrata secondo il parametro di filtro specificato e in ordine alfanumerico."

#. Tag: literal
#: Security.xml:1676
#: Security.xml:1793
#: Security.xml:2059
#, no-c-format
msgid "listRoles()"
msgstr "listRoles()"

#. Tag: para
#: Security.xml:1685
#, no-c-format
msgid "Returns a list of all role names."
msgstr "Restituisce una lista di tutti i nomi dei ruoli."

#. Tag: literal
#: Security.xml:1694
#, no-c-format
msgid "getGrantedRoles(String name)"
msgstr "getGrantedRoles(String name)"

#. Tag: para
#: Security.xml:1703
#, no-c-format
msgid "Returns a list of the names of all the roles explicitly granted to the specified user name."
msgstr "Restituisce una lista dei nomi di tutti i ruoli esplicitamente concessi all'utente con il nome specificato."

#. Tag: literal
#: Security.xml:1712
#, no-c-format
msgid "getImpliedRoles(String name)"
msgstr "getImpliedRoles(String name)"

#. Tag: para
#: Security.xml:1721
#, no-c-format
msgid "Returns a list of the names of all the roles implicitly granted to the specified user name. Implicitly granted roles include those that are not directly granted to a user, rather they are granted to the roles that the user is a member of. For example, is the <literal>admin</literal> role is a member of the <literal>user</literal> role, and a user is a member of the <literal>admin</literal> role, then the implied roles for the user are both the <literal>admin</literal>, and <literal>user</literal> roles."
msgstr "Restituisce la lista dei nomi di tutti i ruoli implicitamente concessi all'utente specificato. I ruoli implicitamente concessi includono quelli che non sono concessi direttamente all'utente, ma sono concessi ai ruoli di cui l'utente è membro. Ad esempio, se il ruolo <literal>admin</literal> è un membro del ruolo <literal>user</literal> e un utente è membro del ruolo <literal>admin</literal>, allora i ruoli impliciti per l'utente sono sia <literal>admin</literal> che <literal>user</literal>."

#. Tag: literal
#: Security.xml:1735
#, no-c-format
msgid "authenticate(String name, String password)"
msgstr "authenticate(String name, String password)"

#. Tag: para
#: Security.xml:1744
#, no-c-format
msgid "Authenticates the specified username and password using the configured Identity Store. Returns <literal>true</literal> if successful or <literal>false</literal> if authentication failed. Successful authentication implies nothing beyond the return value of the method. It does not change the state of the <literal>Identity</literal> component - to perform a proper Seam login the <literal>Identity.login()</literal> must be used instead."
msgstr "Autenticazione il nome utente e la password specificati usando l'Identity Store configurato. Restituisce <literal>true</literal> se conclude con successo, oppure <literal>false</literal> se l'autenticazione fallisce. Il successo dell'autenticazione non implica niente oltre al valore restituito dal metodo. Non cambia lo stato del componente <literal>Identity</literal>. Per eseguire un vero e proprio login deve essere invece usato il metodo <literal>Identity.login()</literal>."

#. Tag: literal
#: Security.xml:1757
#, no-c-format
msgid "addRoleToGroup(String role, String group)"
msgstr "addRoleToGroup(String role, String group)"

#. Tag: para
#: Security.xml:1766
#, no-c-format
msgid "Adds the specified role as a member of the specified group. Returns true if the operation is successful."
msgstr "Aggiunge il ruolo specificato come membro del gruppo specificato. Restituisce <literal>true</literal> se l'operazione va a buon fine."

#. Tag: literal
#: Security.xml:1775
#, no-c-format
msgid "removeRoleFromGroup(String role, String group)"
msgstr "removeRoleFromGroup(String role, String group)"

#. Tag: para
#: Security.xml:1784
#, no-c-format
msgid "Removes the specified role from the specified group. Returns true if the operation is successful."
msgstr "Rimuove il ruolo specificato dal gruppo specificato. Restituisce <literal>true</literal> se l'operazione va a buon fine."

#. Tag: para
#: Security.xml:1802
#, no-c-format
msgid "Lists the names of all roles."
msgstr "Elenca i nomi di tutti i ruoli."

#. Tag: para
#: Security.xml:1812
#, no-c-format
msgid "Using the Identity Management API requires that the calling user has the appropriate authorization to invoke its methods. The following table describes the permission requirements for each of the methods in <literal>IdentityManager</literal>. The permission targets listed below are literal String values."
msgstr "L'uso delle API per la gestione delle identità richiede che l'utente chiamante abbia le autorizzazioni appropriate per invocare i suoi metodi. La seguente tabella descrive i permessi richiesti per ciascuno dei metodi in <literal>IdentityManager</literal>. Gli oggetti dei permessi elencati qui sotto sono valori stringa."

#. Tag: title
#: Security.xml:1819
#, no-c-format
msgid "Identity Management Security Permissions"
msgstr "Permessi di sicurezza nella gestione delle identità"

#. Tag: para
#: Security.xml:1831
#: Security.xml:3970
#, no-c-format
msgid "Permission Target"
msgstr "Oggetto del permesso"

#. Tag: para
#: Security.xml:1834
#: Security.xml:3973
#, no-c-format
msgid "Permission Action"
msgstr "Azione del permesso"

#. Tag: literal
#: Security.xml:1843
#, no-c-format
msgid "createUser()"
msgstr "createUser()"

#. Tag: literal
#: Security.xml:1848
#: Security.xml:1866
#: Security.xml:1920
#: Security.xml:1938
#: Security.xml:1956
#: Security.xml:1974
#: Security.xml:1992
#: Security.xml:2010
#: Security.xml:2028
#: Security.xml:2046
#, no-c-format
msgid "seam.user"
msgstr "seam.user"

#. Tag: literal
#: Security.xml:1853
#: Security.xml:1889
#, no-c-format
msgid "create"
msgstr "create"

#. Tag: literal
#: Security.xml:1861
#, no-c-format
msgid "deleteUser()"
msgstr "deleteUser()"

#. Tag: literal
#: Security.xml:1871
#: Security.xml:1907
#, no-c-format
msgid "delete"
msgstr "delete"

#. Tag: literal
#: Security.xml:1879
#, no-c-format
msgid "createRole()"
msgstr "createRole()"

#. Tag: literal
#: Security.xml:1884
#: Security.xml:1902
#: Security.xml:2064
#: Security.xml:2082
#: Security.xml:2100
#, no-c-format
msgid "seam.role"
msgstr "seam.role"

#. Tag: literal
#: Security.xml:1897
#, no-c-format
msgid "deleteRole()"
msgstr "deleteRole()"

#. Tag: literal
#: Security.xml:1915
#, no-c-format
msgid "enableUser()"
msgstr "enableUser()"

#. Tag: literal
#: Security.xml:1925
#: Security.xml:1943
#: Security.xml:1961
#: Security.xml:1997
#: Security.xml:2015
#: Security.xml:2087
#: Security.xml:2105
#, no-c-format
msgid "update"
msgstr "update"

#. Tag: literal
#: Security.xml:1933
#, no-c-format
msgid "disableUser()"
msgstr "disableUser()"

#. Tag: literal
#: Security.xml:1951
#, no-c-format
msgid "changePassword()"
msgstr "changePassword()"

#. Tag: literal
#: Security.xml:1969
#, no-c-format
msgid "isUserEnabled()"
msgstr "isUserEnabled()"

#. Tag: literal
#: Security.xml:1979
#: Security.xml:2033
#: Security.xml:2051
#: Security.xml:2069
#, no-c-format
msgid "read"
msgstr "read"

#. Tag: literal
#: Security.xml:1987
#, no-c-format
msgid "grantRole()"
msgstr "grantRole()"

#. Tag: literal
#: Security.xml:2005
#, no-c-format
msgid "revokeRole()"
msgstr "revokeRole()"

#. Tag: literal
#: Security.xml:2023
#, no-c-format
msgid "userExists()"
msgstr "userExists()"

#. Tag: literal
#: Security.xml:2077
#, no-c-format
msgid "addRoleToGroup()"
msgstr "addRoleToGroup()"

#. Tag: literal
#: Security.xml:2095
#, no-c-format
msgid "removeRoleFromGroup()"
msgstr "removeRoleFromGroup()"

#. Tag: para
#: Security.xml:2113
#, no-c-format
msgid "The following code listing provides an example set of security rules that grants access to all Identity Management-related methods to members of the <literal>admin</literal> role:"
msgstr "Il seguente listato fornisce un esempio con un insieme di regole di sicurezza che concedono al ruolo <literal>admin</literal> l'accesso a tutti i metodi relativi alla gestione delle identità:"

#. Tag: programlisting
#: Security.xml:2118
#, no-c-format
msgid ""
"<![CDATA[rule ManageUsers\n"
"  no-loop\n"
"  activation-group \"permissions\"\n"
"when\n"
"  check: PermissionCheck(name == \"seam.user\", granted == false)\n"
"  Role(name == \"admin\")\n"
"then\n"
"  check.grant();\n"
"end\n"
"\n"
"rule ManageRoles\n"
"  no-loop\n"
"  activation-group \"permissions\"\n"
"when\n"
"  check: PermissionCheck(name == \"seam.role\", granted == false)\n"
"  Role(name == \"admin\")\n"
"then\n"
"  check.grant();\n"
"end\n"
"]]>"
msgstr ""
"<![CDATA[rule ManageUsers\n"
"  no-loop\n"
"  activation-group \"permissions\"\n"
"when\n"
"  check: PermissionCheck(name == \"seam.user\", granted == false)\n"
"  Role(name == \"admin\")\n"
"then\n"
"  check.grant();\n"
"end\n"
"\n"
"rule ManageRoles\n"
"  no-loop\n"
"  activation-group \"permissions\"\n"
"when\n"
"  check: PermissionCheck(name == \"seam.role\", granted == false)\n"
"  Role(name == \"admin\")\n"
"then\n"
"  check.grant();\n"
"end\n"
"]]>"

#. Tag: title
#: Security.xml:2125
#, no-c-format
msgid "Error Messages"
msgstr "Messaggi di errore"

#. Tag: para
#: Security.xml:2127
#, no-c-format
msgid "The security API produces a number of default faces messages for various security-related events. The following table lists the message keys that can be used to override these messages by specifying them in a <literal>message.properties</literal> resource file. To suppress the message, just put the key with an empty value in the resource file."
msgstr "Le API di sicurezza producono una serie di messaggi di default per i diversi eventi relativi alla sicurezza. La seguente tabella elenca le chiavi dei messaggi che possono essere usate per sovrascrivere questi messaggi specificandoli in un file <literal>message.properties</literal>. Per sopprimere un messaggio basta mettere nel file la chiave con un valore vuoto."

#. Tag: title
#: Security.xml:2135
#, no-c-format
msgid "Security Message Keys"
msgstr "Chiavi dei messaggi di sicurezza"

#. Tag: para
#: Security.xml:2144
#, no-c-format
msgid "Message Key"
msgstr "Chiave del messaggio"

#. Tag: literal
#: Security.xml:2157
#, no-c-format
msgid "org.jboss.seam.loginSuccessful"
msgstr "org.jboss.seam.loginSuccessful"

#. Tag: para
#: Security.xml:2161
#, no-c-format
msgid "This message is produced when a user successfully logs in via the security API."
msgstr "Questo messaggio viene prodotto quando un utente porta a buon fine un login tramite le API di sicurezza."

#. Tag: literal
#: Security.xml:2169
#, no-c-format
msgid "org.jboss.seam.loginFailed"
msgstr "org.jboss.seam.loginFailed"

#. Tag: para
#: Security.xml:2173
#, no-c-format
msgid "This message is produced when the login process fails, either because the user provided an incorrect username or password, or because authentication failed in some other way."
msgstr "Questo messaggio viene prodotto quando il processo di login fallisce, perché il nome utente e la password forniti dall'utente non sono corretti, oppure perché l'autenticazione è fallita per qualche altro motivo."

#. Tag: literal
#: Security.xml:2182
#, no-c-format
msgid "org.jboss.seam.NotLoggedIn"
msgstr "org.jboss.seam.NotLoggedIn"

#. Tag: para
#: Security.xml:2186
#, no-c-format
msgid "This message is produced when a user attempts to perform an action or access a page that requires a security check, and the user is not currently authenticated."
msgstr "Questo messaggio viene prodotto quando un utente tenta di eseguire un'azione o di accedere ad una pagina che richiede un controllo di sicurezza e l'utente non è al momento autenticato."

#. Tag: literal
#: Security.xml:2195
#, no-c-format
msgid "org.jboss.seam.AlreadyLoggedIn"
msgstr "org.jboss.seam.AlreadyLoggedIn"

#. Tag: para
#: Security.xml:2199
#, no-c-format
msgid "This message is produced when a user that is already authenticated attempts to log in again."
msgstr "Questo messaggio viene prodotto quando un utente che è già autenticato tenta di eseguire di nuovo il login."

#. Tag: title
#: Security.xml:2210
#, no-c-format
msgid "Authorization"
msgstr "Autorizzazione"

#. Tag: para
#: Security.xml:2212
#, no-c-format
msgid "There are a number of authorization mechanisms provided by the Seam Security API for securing access to components, component methods, and pages. This section describes each of these. An important thing to note is that if you wish to use any of the advanced features (such as rule-based permissions) then your <literal>components.xml</literal> may need to be configured to support this - see the Configuration section above."
msgstr "Ci sono diversi meccanismi di autorizzazione forniti dalle API di sicurezza di Seam per rendere sicuro l'accesso ai componenti, ai metodi dei componenti e alle pagine. Questo paragrafo descrive ognuno di essi. Un aspetto importante da notare è che qualora si voglia utilizzare una delle caratteristiche avanzate (come i permessi basati sulle regole) il <literal>components.xml</literal> potrebbe dover essere configurato per gestirle. Vedi il paragrafo Configurazione più sopra."

#. Tag: title
#: Security.xml:2221
#, no-c-format
msgid "Core concepts"
msgstr "Concetti principali"

#. Tag: para
#: Security.xml:2223
#, no-c-format
msgid "Seam Security is built around the premise of users being granted roles and/or permissions, allowing them to perform operations that may not otherwise be permissible for users without the necessary security privileges. Each of the authorization mechanisms provided by the Seam Security API are built upon this core concept of roles and permissions, with an extensible framework providing multiple ways to secure application resources."
msgstr "La sicurezza di Seam è costruita intorno alla premessa per cui agli utenti vengono concessi ruoli e/o permessi, consentendo loro di eseguire operazioni che non sarebbero altrimenti permesse agli utenti senza i necessari privilegi di sicurezza. Ognuno dei meccanismi di autorizzazione forniti dalle API di sicurezza di Seam è costruito intorno a questo concetto principale di ruoli e permessi, con un framework espandibile che fornisce più modi per rendere sicure le risorse di un'applicazione."

#. Tag: title
#: Security.xml:2231
#, no-c-format
msgid "What is a role?"
msgstr "Cosa è un ruolo?"

#. Tag: para
#: Security.xml:2233
#, no-c-format
msgid "A role is a <emphasis>group</emphasis>, or <emphasis>type</emphasis>, of user that may have been granted certain privileges for performing one or more specific actions within an application. They are simple constructs, consisting of just a name such as \"admin\", \"user\", \"customer\", etc. They can be granted either to users (or in some cases to other roles), and are used to create logical groups of users for the convenient assignment of specific application privileges."
msgstr "Un ruolo è un <emphasis>gruppo</emphasis>, o un <emphasis>tipo</emphasis>, di utente al quale possono essere concessi certi privilegi per eseguire una o più azioni specifiche nell'ambito dell'applicazione. Essi sono dei semplici costrutti consistenti solo di un nome quale \"amministratore\", \"utente\", \"cliente\", ecc. Possono sia essere concessi ad un utente (o in alcuni casi ad altri ruoli) che essere usati per creare gruppi logici di utenti per facilitare l'assegnazione di determinati privilegi dell'applicazione."

#. Tag: title
#: Security.xml:2251
#, no-c-format
msgid "What is a permission?"
msgstr "Cosa è un permesso?"

#. Tag: para
#: Security.xml:2253
#, no-c-format
msgid "A permission is a privilege (sometimes once-off) for performing a single, specific action. It is entirely possible to build an application using nothing but permissions, however roles offer a higher level of convenience when granting privileges to groups of users. They are slightly more complex in structure than roles, essentially consisting of three \"aspects\"; a target, an action, and a recipient. The target of a permission is the object (or an arbitrary name or class) for which a particular action is allowed to be performed by a specific recipient (or user). For example, the user \"Bob\" may have permission to delete customer objects. In this case, the permission target may be \"customer\", the permission action would be \"delete\" and the recipient would be \"Bob\"."
msgstr "Un permesso è un privilegio (a volte una-tantum) per eseguire una singola, specifica azione. E' del tutto possibile costruire un'applicazione usando nient'altro che i privilegi, comunque i ruoli offrono un livello di facilitazione più alto quando si tratta di concedere dei privilegi a gruppi di utenti. Essi sono leggermente più complessi nella struttura rispetto ai ruoli ed essenzialmente consistono di tre \"aspetti\": un obiettivo, un'azione e un destinatario. L'obiettivo di un permesso è l'oggetto (o un nome arbitrario o una classe) per il quale è consentito di eseguire una determinata azione da parte di uno specifico destinatario (o utente). Ad esempio, l'utente \"Roberto\" può avere il permesso di cancellare gli oggetti cliente. In questo caso l'obiettivo del permesso può essere \"clienti\", l'azione del permesso sarà \"cancella\" e il destinatario sarà \"Roberto\"."

#. Tag: para
#: Security.xml:2273
#, no-c-format
msgid "Within this documentation, permissions are generally represented in the form <literal>target:action</literal> (omitting the recipient, although in reality one is always required)."
msgstr "Nell'ambito di questa documentazione i permessi sono generalmente rappresentati nella forma <literal>obiettivo:azione</literal> (omettendo il destinatario, benché nella realtà sarà sempre richiesto)."

#. Tag: title
#: Security.xml:2282
#, no-c-format
msgid "Securing components"
msgstr "Rendere sicuri i componenti"

#. Tag: para
#: Security.xml:2284
#, no-c-format
msgid "Let's start by examining the simplest form of authorization, component security, starting with the <literal>@Restrict</literal> annotation."
msgstr "Iniziamo ad esaminare la forma più semplice di autorizzazione, la sicurezza dei componenti, inziando con l'annotazione <literal>@Restrict</literal>."

#. Tag: title
#: Security.xml:2290
#, no-c-format
msgid "@Restrict vs Typesafe security annotations"
msgstr "@Restrict e le annotazioni di sicurezza tipizzate"

#. Tag: para
#: Security.xml:2292
#, no-c-format
msgid "While using the <literal>@Restrict</literal> annotation provides a powerful and flexible method for security component methods due to its ability to support EL expressions, it is recommended that the typesafe equivalent (described later) be used, at least for the compile-time safety it provides."
msgstr "Benché l'uso dell'annotazione <literal>@Restrict</literal> fornisca un metodo flessibile e potente per rendere sicuri i componenti grazie alla sua possibilità di gestire le espressione EL, è consigliabile usare l'equivalente tipizzato (descritto più avanti), se non altro per la sicurezza a livello di compilazione che fornisce."

#. Tag: title
#: Security.xml:2300
#, no-c-format
msgid "The @Restrict annotation"
msgstr "L'annotazione @Restrict"

#. Tag: para
#: Security.xml:2302
#, no-c-format
msgid "Seam components may be secured either at the method or the class level, using the <literal>@Restrict</literal> annotation. If both a method and it's declaring class are annotated with <literal>@Restrict</literal>, the method restriction will take precedence (and the class restriction will not apply). If a method invocation fails a security check, then an exception will be thrown as per the contract for <literal>Identity.checkRestriction()</literal> (see Inline Restrictions). A <literal>@Restrict</literal> on just the component class itself is equivalent to adding <literal>@Restrict</literal> to each of its methods."
msgstr "I componenti Seam possono essere resi sicuri sia a livello di metodo che a livello di classe usando l'annotazione <literal>@Restrict</literal>. Qualora sia un metodo sia la classe in cui questo è dichiarato sono annotati con <literal>@Restrict</literal>, la restrizione sul metodo ha la precedenza (e la restrizione sulla classe non si applica). Se nell'invocazione di un metodo fallisce il controllo di sicurezza, viene lanciata un'eccezione come definito nel contratto di <literal>Identity.checkRestriction()</literal> (vedi Restrizioni in linea). Una <literal>@Restrict</literal> solo sulla classe del componente stesso è equivalente ad aggiungere <literal>@Restrict</literal> a ciascuno dei suoi metodi."

#. Tag: para
#: Security.xml:2312
#, no-c-format
msgid "An empty <literal>@Restrict</literal> implies a permission check of <literal>componentName:methodName</literal>. Take for example the following component method:"
msgstr "Una <literal>@Restrict</literal> vuota implica un controllo di permesso per <literal>nomeComponente:nomeMetodo</literal>. Prendiamo ad esempio il seguente metodo di un componente:"

#. Tag: programlisting
#: Security.xml:2317
#, no-c-format
msgid ""
"<![CDATA[@Name(\"account\")\n"
"public class AccountAction {\n"
"    @Restrict public void delete() {\n"
"      ...\n"
"    }\n"
"}]]>"
msgstr ""
"<![CDATA[@Name(\"account\")\n"
"public class AccountAction {\n"
"    @Restrict public void delete() {\n"
"      ...\n"
"    }\n"
"}]]>"

#. Tag: para
#: Security.xml:2319
#, no-c-format
msgid "In this example, the implied permission required to call the <literal>delete()</literal> method is <literal>account:delete</literal>. The equivalent of this would be to write <literal>@Restrict(\"#{s:hasPermission('account','delete')}\")</literal>. Now let's look at another example:"
msgstr "In questo esempio il permesso richiesto per chiamare il metodo <literal>delete()</literal> è <literal>account:delete</literal>. L'equivalente di ciò sarebbe stato scrivere <literal>@Restrict(\"#{s:hasPermission('account','delete')}\")</literal>. Ora vediamo un altro esempio:"

#. Tag: programlisting
#: Security.xml:2326
#, no-c-format
msgid ""
"<![CDATA[@Restrict @Name(\"account\")\n"
"public class AccountAction {\n"
"    public void insert() {\n"
"      ...\n"
"    }\n"
"    @Restrict(\"#{s:hasRole('admin')}\")\n"
"    public void delete() {\n"
"      ...\n"
"    }\n"
"}]]>"
msgstr ""
"<![CDATA[@Restrict @Name(\"account\")\n"
"public class AccountAction {\n"
"    public void insert() {\n"
"      ...\n"
"    }\n"
"    @Restrict(\"#{s:hasRole('admin')}\")\n"
"    public void delete() {\n"
"      ...\n"
"    }\n"
"}]]>"

#. Tag: para
#: Security.xml:2328
#, no-c-format
msgid "This time, the component class itself is annotated with <literal>@Restrict</literal>. This means that any methods without an overriding <literal>@Restrict</literal> annotation require an implicit permission check. In the case of this example, the <literal>insert()</literal> method requires a permission of <literal>account:insert</literal>, while the <literal>delete()</literal> method requires that the user is a member of the <literal>admin</literal> role."
msgstr "Questa volta la classe stessa del componente è annotata con <literal>@Restrict</literal>. Ciò significa che tutti i metodi senza una annotazione <literal>@Restrict</literal> a sovrascrivere, richiedono un controllo implicito di permesso. Nel caso di questo esempio il metodo <literal>insert()</literal> richiede un permesso per <literal>account:insert</literal>, mentre il metodo <literal>delete()</literal> richiede che l'utente sia membro del ruolo <literal>admin</literal>."

#. Tag: para
#: Security.xml:2336
#, no-c-format
msgid "Before we go any further, let's address the <literal>#{s:hasRole()}</literal> expression seen in the above example. Both <literal>s:hasRole</literal> and <literal>s:hasPermission</literal> are EL functions, which delegate to the correspondingly named methods of the <literal>Identity</literal> class. These functions can be used within any EL expression throughout the entirety of the security API."
msgstr "Prima di andare avanti, esaminiamo l'espressione <literal>#{s:hasRole()}</literal> vista nell'esempio precedente. Sia <literal>s:hasRole()</literal> che <literal>s:hasPermission</literal> sono funzioni EL, le quali delegano ai metodi con i nomi corrispondenti nella classe <literal>Identity</literal>. Queste funzioni possono essere usate all'interno di una espressione EL in tutte le API di sicurezza."

#. Tag: para
#: Security.xml:2343
#, no-c-format
msgid "Being an EL expression, the value of the <literal>@Restrict</literal> annotation may reference any objects that exist within a Seam context. This is extremely useful when performing permission checks for a specific object instance. Look at this example:"
msgstr "Essendo un'espressione EL, il valore dell'annotazione <literal>@Restrict</literal> può fare riferimento a qualunque oggetto che sia presente in un contesto Seam. Ciò è estremamente utile quando si eseguono i controlli sui permessi per una specifica istanza di un oggetto. Ad esempio:"

#. Tag: programlisting
#: Security.xml:2349
#, no-c-format
msgid ""
"<![CDATA[@Name(\"account\")\n"
"public class AccountAction {\n"
"    @In Account selectedAccount;\n"
"    @Restrict(\"#{s:hasPermission(selectedAccount,'modify')}\")\n"
"    public void modify() {\n"
"        selectedAccount.modify();\n"
"    }\n"
"}]]>"
msgstr ""
"<![CDATA[@Name(\"account\")\n"
"public class AccountAction {\n"
"    @In Account selectedAccount;\n"
"    @Restrict(\"#{s:hasPermission(selectedAccount,'modifica')}\")\n"
"    public void modify() {\n"
"        selectedAccount.modify();\n"
"    }\n"
"}]]>"

#. Tag: para
#: Security.xml:2351
#, no-c-format
msgid "The interesting thing to note from this example is the reference to <literal>selectedAccount</literal> seen within the <literal>hasPermission()</literal> function call. The value of this variable will be looked up from within the Seam context, and passed to the <literal>hasPermission()</literal> method in <literal>Identity</literal>, which in this case can then determine if the user has the required permission for modifying the specified <literal>Account</literal> object."
msgstr "La cosa interessante da notare in questo esempio è il riferimento a <literal>selectedAccount</literal> che si vede all'interno della chiamata alla funzione <literal>hasPermission</literal>. Il valore di questa variabile verrà ricercato all'interno del contesto Seam e passato al metodo <literal>hasPermission()</literal> di <literal>Identity</literal>, il quale in questo caso può determinare se l'utente ha il permesso richiesto per modificare l'oggetto <literal>Account</literal> specificato."

#. Tag: title
#: Security.xml:2361
#, no-c-format
msgid "Inline restrictions"
msgstr "Restrizioni in linea"

#. Tag: para
#: Security.xml:2362
#, no-c-format
msgid "Sometimes it might be desirable to perform a security check in code, without using the <literal>@Restrict</literal> annotation. In this situation, simply use <literal>Identity.checkRestriction()</literal> to evaluate a security expression, like this:"
msgstr "A volte può risultare desiderabile eseguire un controllo di sicurezza nel codice, senza usare l'annotazione <literal>@Restrict</literal>. In questa situazione basta usare semplicemente <literal>Identity.checkRestriction()</literal> per risolvere l'espressione di sicurezza, così:"

#. Tag: programlisting
#: Security.xml:2368
#, no-c-format
msgid ""
"<![CDATA[public void deleteCustomer() {\n"
"    Identity.instance().checkRestriction(\"#{s:hasPermission(selectedCustomer,'delete')}\");\n"
"}]]>"
msgstr ""
"<![CDATA[public void deleteCustomer() {\n"
"    Identity.instance().checkRestriction(\"#{s:hasPermission(selectedCustomer,'delete')}\");\n"
"}]]>"

#. Tag: para
#: Security.xml:2370
#, no-c-format
msgid "If the expression specified doesn't evaluate to <literal>true</literal>, either"
msgstr "Se l'espressione specificata non risolve a <literal>true</literal>, allora"

#. Tag: para
#: Security.xml:2376
#, no-c-format
msgid "if the user is not logged in, a <literal>NotLoggedInException</literal> exception is thrown or"
msgstr "se l'utente non ha eseguito l'accesso, l'eccezione <literal>NotLoggedInException</literal> viene lanciata, oppure"

#. Tag: para
#: Security.xml:2382
#, no-c-format
msgid "if the user is logged in, an <literal>AuthorizationException</literal> exception is thrown."
msgstr "se l'utente ha eseguito l'accesso, viene lanciata un'eccezione <literal>AuthorizationException</literal>."

#. Tag: para
#: Security.xml:2389
#, no-c-format
msgid "It is also possible to call the <literal>hasRole()</literal> and <literal>hasPermission()</literal> methods directly from Java code:"
msgstr "E' anche possibile chiamare i metodi <literal>hasRole()</literal> e <literal>hasPermission()</literal> direttamente dal codice Java:"

#. Tag: programlisting
#: Security.xml:2394
#, no-c-format
msgid ""
"<![CDATA[if (!Identity.instance().hasRole(\"admin\"))\n"
"     throw new AuthorizationException(\"Must be admin to perform this action\");\n"
"\n"
"if (!Identity.instance().hasPermission(\"customer\", \"create\"))\n"
"     throw new AuthorizationException(\"You may not create new customers\");]]>"
msgstr ""
"<![CDATA[if (!Identity.instance().hasRole(\"amministratore\"))\n"
"     throw new AuthorizationException(\"Devi essere un amministratore per eseguire questa azione\");\n"
"\n"
"if (!Identity.instance().hasPermission(\"cliente\", \"crea\"))\n"
"     throw new AuthorizationException(\"Non puoi creare nuovi clienti\");]]>"

#. Tag: title
#: Security.xml:2400
#, no-c-format
msgid "Security in the user interface"
msgstr "La sicurezza nell'interfaccia utente"

#. Tag: para
#: Security.xml:2402
#, no-c-format
msgid "One indication of a well designed user interface is that the user is not presented with options for which they don't have the necessary privileges to use. Seam Security allows conditional rendering of either 1) sections of a page or 2) individual controls, based upon the privileges of the user, using the very same EL expressions that are used for component security."
msgstr "Uno degli indicatori di interfaccia utente ben progettata è quando agli utenti non vengono presentate opzioni per le quali essi non hanno i permessi necessari. La sicurezza di Seam consente la visualizzazione condizionale sia di sezioni di una pagina che di singoli controlli, basata sui privilegi dell'utente, usando esattamente le stesse espressioni EL usate nella sicurezza dei componenti."

#. Tag: para
#: Security.xml:2409
#, no-c-format
msgid "Let's take a look at some examples of interface security. First of all, let's pretend that we have a login form that should only be rendered if the user is not already logged in. Using the <literal>identity.isLoggedIn()</literal> property, we can write this:"
msgstr "Diamo un'occhiata ad alcuni esempi della sicurezza nell'interfaccia. Prima di tutto prentendiamo di avere una form di accesso che debba essere visualizzata solo se l'utente non ha già fatto l'accesso. Usando la proprietà <literal>identity.isLoggedIn()</literal> possiamo scrivere questo:"

#. Tag: programlisting
#: Security.xml:2415
#, no-c-format
msgid "<![CDATA[<h:form class=\"loginForm\" rendered=\"#{not identity.loggedIn}\">]]>"
msgstr "<![CDATA[<h:form class=\"loginForm\" rendered=\"#{not identity.loggedIn}\">]]>"

#. Tag: para
#: Security.xml:2417
#, no-c-format
msgid "If the user isn't logged in, then the login form will be rendered - very straight forward so far. Now let's pretend there is a menu on the page that contains some actions which should only be accessible to users in the <literal>manager</literal> role. Here's one way that these could be written:"
msgstr "Se l'utente non ha eseguito l'accesso, allora la form di accesso verrà visualizzata. Fin qui tutto bene. Ora vogliamo che ci sia un menu sulla pagina che contenga alcune azioni speciali che devono essere accessibili solo agli utenti del ruolo <literal>dirigente</literal>. Ecco un modo in cui ciò potrebbe essere scritto:"

#. Tag: programlisting
#: Security.xml:2423
#, no-c-format
msgid ""
"<![CDATA[<h:outputLink action=\"#{reports.listManagerReports}\" rendered=\"#{s:hasRole('manager')}\">\n"
"    Manager Reports\n"
"</h:outputLink>]]>"
msgstr ""
"<![CDATA[<h:outputLink action=\"#{reports.listManagerReports}\" rendered=\"#{s:hasRole('dirigente')}\">\n"
"    Rapporti per i dirigenti\n"
"</h:outputLink>]]>"

#. Tag: para
#: Security.xml:2425
#, no-c-format
msgid "This is also quite straight forward. If the user is not a member of the <literal>manager</literal> role, then the outputLink will not be rendered. The <literal>rendered</literal> attribute can generally be used on the control itself, or on a surrounding <literal>&lt;s:div&gt;</literal> or <literal>&lt;s:span&gt;</literal> control."
msgstr "Anche fin qui tutto bene. Se l'utente non è un membro del ruolo <literal>dirigente</literal>, allora <literal>outputLink</literal> non verrà visualizzato. L'attributo <literal>rendered</literal> in generale può essere usato per il controllo stesso oppure in un controllo <literal>&lt;s:div&gt;</literal> o <literal>&lt;s:span&gt;</literal> che ne comprende altri."

#. Tag: para
#: Security.xml:2432
#, no-c-format
msgid "Now for something more complex. Let's say you have a <literal>h:dataTable</literal> control on a page listing records for which you may or may not wish to render action links depending on the user's privileges. The <literal>s:hasPermission</literal> EL function allows us to pass in an object parameter which can be used to determine whether the user has the requested permission for that object or not. Here's how a dataTable with secured links might look:"
msgstr "Ora andiamo su qualcosa di più complesso. Supponiamo di avere in una pagina un controllo <literal>h:dataTable</literal> che elenca delle righe per le quali si può volere visualizzare o meno i link alle azioni in funzione dei permessi dell'utente. La funzione EL <literal>s:hasPermission</literal> ci consente di passare un parametro oggetto che può essere usato per determinare se l'utente ha o meno il permesso richiesto per quell'oggetto. Ecco come può apparire una <literal>dataTable</literal> con dei link controllati dalla sicurezza:"

#. Tag: programlisting
#: Security.xml:2440
#, no-c-format
msgid ""
"<![CDATA[<h:dataTable value=\"#{clients}\" var=\"cl\">\n"
"    <h:column>\n"
"        <f:facet name=\"header\">Name</f:facet>\n"
"        #{cl.name}\n"
"    </h:column>\n"
"    <h:column>\n"
"        <f:facet name=\"header\">City</f:facet>\n"
"        #{cl.city}\n"
"    </h:column>\n"
"    <h:column>\n"
"        <f:facet name=\"header\">Action</f:facet>\n"
"        <s:link value=\"Modify Client\" action=\"#{clientAction.modify}\"\n"
"                rendered=\"#{s:hasPermission(cl,'modify')\"/>\n"
"        <s:link value=\"Delete Client\" action=\"#{clientAction.delete}\"\n"
"                rendered=\"#{s:hasPermission(cl,'delete')\"/>\n"
"    </h:column>\n"
"</h:dataTable>]]>"
msgstr ""
"<![CDATA[<h:dataTable value=\"#{clients}\" var=\"cl\">\n"
"    <h:column>\n"
"        <f:facet name=\"header\">Nome</f:facet>\n"
"        #{cl.name}\n"
"    </h:column>\n"
"    <h:column>\n"
"        <f:facet name=\"header\">Città</f:facet>\n"
"        #{cl.city}\n"
"    </h:column>\n"
"    <h:column>\n"
"        <f:facet name=\"header\">Azione</f:facet>\n"
"        <s:link value=\"Modifica cliente\" action=\"#{clientAction.modify}\"\n"
"                rendered=\"#{s:hasPermission(cl,'modifica')\"/>\n"
"        <s:link value=\"Cancella cliente\" action=\"#{clientAction.delete}\"\n"
"                rendered=\"#{s:hasPermission(cl,'cancella')\"/>\n"
"    </h:column>\n"
"</h:dataTable>]]>"

#. Tag: title
#: Security.xml:2445
#, no-c-format
msgid "Securing pages"
msgstr "Rendere sicure le pagine"

#. Tag: para
#: Security.xml:2446
#, no-c-format
msgid "Page security requires that the application is using a <literal>pages.xml</literal> file, however is extremely simple to configure. Simply include a <literal>&lt;restrict/&gt;</literal> element within the <literal>page</literal> elements that you wish to secure. If no explicit restriction is specified by the <literal>restrict</literal> element, an implied permission of <literal>/viewId.xhtml:render</literal> will be checked when the page is accessed via a non-faces (GET) request, and a permission of <literal>/viewId.xhtml:restore</literal> will be required when any JSF postback (form submission) originates from the page. Otherwise, the specified restriction will be evaluated as a standard security expression. Here's a couple of examples:"
msgstr "La sicurezza delle pagine richiede che l'applicazione usi un file <literal>pages.xml</literal>. Comunque è molto semplice da configurare. Basta includere un elemento <literal>&lt;restrict&gt;</literal> all'interno degli elementi <literal>page</literal> che si vogliono rendere sicuri. Se tramite l'elemento <literal>restrict</literal> non viene indicata esplicitamente una restrizione, verrà controllato implicitamente il permesso <literal>/viewId.xhtml:render</literal> quando la richiesta della pagina avviene in modo non-faces (GET), e il permesso<literal>/viewId.xhtml:restore</literal> quando un JSF postback (il submit della form) viene originato dalla pagina. Altrimenti la restrizione specificata verrà valutata come una normale espressione di sicurezza. Ecco un paio di esempi:"

#. Tag: programlisting
#: Security.xml:2457
#, no-c-format
msgid ""
"<![CDATA[<page view-id=\"/settings.xhtml\">\n"
"    <restrict/>\n"
"</page>]]>"
msgstr ""
"<![CDATA[<page view-id=\"/settings.xhtml\">\n"
"    <restrict/>\n"
"</page>]]>"

#. Tag: para
#: Security.xml:2459
#, no-c-format
msgid "This page has an implied permission of <literal>/settings.xhtml:render</literal> required for non-faces requests and an implied permission of <literal>/settings.xhtml:restore</literal> for faces requests."
msgstr "Questa pagina richiede implicitamente un permesso <literal>/settings.xhtml:render</literal> per le richieste non-faces e un permesso <literal>/settings.xhtml:restore</literal> per le richieste faces."

#. Tag: programlisting
#: Security.xml:2464
#, no-c-format
msgid ""
"<![CDATA[<page view-id=\"/reports.xhtml\">\n"
"    <restrict>#{s:hasRole('admin')}</restrict>\n"
"</page>]]>"
msgstr ""
"<![CDATA[<page view-id=\"/reports.xhtml\">\n"
"    <restrict>#{s:hasRole('amministratore')}</restrict>\n"
"</page>]]>"

#. Tag: para
#: Security.xml:2466
#, no-c-format
msgid "Both faces and non-faces requests to this page require that the user is a member of the <literal>admin</literal> role."
msgstr "Sia le richieste faces che quelle non-faces a questa pagina richiedono che l'utente sia membro del ruolo <literal>amministratore</literal>."

#. Tag: title
#: Security.xml:2474
#, no-c-format
msgid "Securing Entities"
msgstr "Rendere sicure le entità"

#. Tag: para
#: Security.xml:2476
#, no-c-format
msgid "Seam security also makes it possible to apply security restrictions to read, insert, update and delete actions for entities."
msgstr "La sicurezza di Seam consente anche di applicare le restrizioni di sicurezza alle azioni per leggere, inserire, aggiornare e cancellare le entità."

#. Tag: para
#: Security.xml:2481
#, no-c-format
msgid "To secure all actions for an entity class, add a <literal>@Restrict</literal> annotation on the class itself:"
msgstr "Per rendere sicure tutte le azioni per una classe entità, aggiungere un'annotazione <literal>@Restrict</literal> alla classe stessa:"

#. Tag: programlisting
#: Security.xml:2486
#, no-c-format
msgid ""
"<![CDATA[@Entity\n"
"@Name(\"customer\")\n"
"@Restrict\n"
"public class Customer {\n"
"  ...\n"
"}]]>"
msgstr ""
"<![CDATA[@Entity\n"
"@Name(\"customer\")\n"
"@Restrict\n"
"public class Customer {\n"
"  ...\n"
"}]]>"

#. Tag: para
#: Security.xml:2488
#, no-c-format
msgid "If no expression is specified in the <literal>@Restrict</literal> annotation, the default security check that is performed is a permission check of <literal>entity:action</literal>, where the permission target is the entity instance, and the <literal>action</literal> is either <literal>read</literal>, <literal>insert</literal>, <literal>update</literal> or <literal>delete</literal>."
msgstr "Se nell'annotazione <literal>@Restrict</literal> non è indicata alcuna espressione, il controllo di sicurezza di default che viene eseguito è una verifica del permesso <literal>entità:azione</literal>, dove l'obiettivo del permesso è l'istanza dell'entità e <literal>azione</literal> è <literal>read</literal>, <literal>insert</literal>, <literal>update</literal> o <literal>delete</literal>."

#. Tag: para
#: Security.xml:2495
#, no-c-format
msgid "It is also possible to only restrict certain actions, by placing a <literal>@Restrict</literal> annotation on the relevent entity lifecycle method (annotated as follows):"
msgstr "E' anche possibile applicare una restrizione solo a determinate azioni, posizionando l'annotazione <literal>@Restrict</literal> nel corrispondente metodo relativo al ciclo di vita dell'entità (annotato come segue):"

#. Tag: para
#: Security.xml:2502
#, no-c-format
msgid "<literal>@PostLoad</literal> - Called after an entity instance is loaded from the database. Use this method to configure a <literal>read</literal> permission."
msgstr "<literal>@PostLoad</literal> - Chiamato dopo che l'istanza di una entità viene caricata dal database. Usare questo metodo per configurare un permesso <literal>read</literal>."

#. Tag: para
#: Security.xml:2508
#, no-c-format
msgid "<literal>@PrePersist</literal> - Called before a new instance of the entity is inserted. Use this method to configure an <literal>insert</literal> permission."
msgstr "<literal>@PrePersist</literal> - Chiamato prima che una nuova istanza dell'entità sia inserita. Usare questo metodo per configurare un permesso <literal>insert</literal>."

#. Tag: para
#: Security.xml:2514
#, no-c-format
msgid "<literal>@PreUpdate</literal> - Called before an entity is updated. Use this method to configure an <literal>update</literal> permission."
msgstr "<literal>@PreUpdate</literal> - Chiamato prima che un'entità sia aggiornata. Usare questo metodo per configurare un permesso <literal>update</literal>."

#. Tag: para
#: Security.xml:2520
#, no-c-format
msgid "<literal>@PreRemove</literal> - Called before an entity is deleted. Use this method to configure a <literal>delete</literal> permission."
msgstr "<literal>@PreRemove</literal> - Chiamato prima che un'entità venga cancellata. Usare questo metodo per configurare un permesso <literal>delete</literal>."

#. Tag: para
#: Security.xml:2527
#, no-c-format
msgid "Here's an example of how an entity would be configured to perform a security check for any <literal>insert</literal> operations. Please note that the method is not required to do anything, the only important thing in regard to security is how it is annotated:"
msgstr "Ecco un esempio di come un'entità potrebbe essere configurata per eseguire un controllo di sicurezza per tutte le operazioni <literal>insert</literal>. Notare che non è richiesto che il metodo faccia qualcosa, la sola cosa importante per quanto riguarda la sicurezza è come questo viene annotato:"

#. Tag: programlisting
#: Security.xml:2533
#, no-c-format
msgid ""
"<![CDATA[\n"
"  @PrePersist @Restrict\n"
"  public void prePersist() {}\n"
"   ]]>"
msgstr ""
"<![CDATA[\n"
"  @PrePersist @Restrict\n"
"  public void prePersist() {}\n"
"   ]]>"

#. Tag: title
#: Security.xml:2536
#, no-c-format
msgid "Using <literal>/META-INF/orm.xml</literal>"
msgstr "Usare <literal>/META-INF/orm.xml</literal>"

#. Tag: para
#: Security.xml:2539
#, no-c-format
msgid "You can also specify the call back method in <literal>/META-INF/orm.xml</literal>:"
msgstr "E' anche possibile specificare i metodi callback in <literal>/META-INF/orm.xml</literal>:"

#. Tag: programlisting
#: Security.xml:2543
#, no-c-format
msgid ""
"<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<entity-mappings xmlns=\"http://java.sun.com/xml/ns/persistence/orm\"\n"
"                 xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"                 xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd\"\n"
"                 version=\"1.0\">\n"
"\n"
"   <entity class=\"Customer\">\n"
"      <pre-persist method-name=\"prePersist\" />\n"
"   </entity>\n"
"\n"
"</entity-mappings>]]>"
msgstr ""
"<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<entity-mappings xmlns=\"http://java.sun.com/xml/ns/persistence/orm\"\n"
"                 xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"                 xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd\"\n"
"                 version=\"1.0\">\n"
"\n"
"   <entity class=\"Customer\">\n"
"      <pre-persist method-name=\"prePersist\" />\n"
"   </entity>\n"
"\n"
"</entity-mappings>]]>"

#. Tag: para
#: Security.xml:2545
#, no-c-format
msgid "Of course, you still need to annotate the <literal>prePersist()</literal> method on <literal>Customer</literal> with <literal>@Restrict</literal>"
msgstr "Ovviamente c'è sempre bisogno di annotare il metodo <literal>prePersist()</literal> in <literal>Customer</literal> con <literal>@Restrict</literal>."

#. Tag: para
#: Security.xml:2551
#, no-c-format
msgid "And here's an example of an entity permission rule that checks if the authenticated user is allowed to insert a new <literal>MemberBlog</literal> record (from the seamspace example). The entity for which the security check is being made is automatically inserted into the working memory (in this case <literal>MemberBlog</literal>):"
msgstr "Ed ecco un esempio di una regola sui permessi di entità che controlla se all'utente autenticato è consentito di inserire un record <literal>MemberBlog</literal> (dall'applicazione di esempio seamspace). L'entità per la quale viene fatto il controllo di sicurezza è inserita automaticamente nella working memory (in questo caso <literal>MemberBlog</literal>):"

#. Tag: programlisting
#: Security.xml:2557
#, no-c-format
msgid ""
"<![CDATA[rule InsertMemberBlog\n"
"  no-loop\n"
"  activation-group \"permissions\"\n"
"when\n"
"  principal: Principal()\n"
"  memberBlog: MemberBlog(member : member -> (member.getUsername().equals(principal.getName())))\n"
"  check: PermissionCheck(target == memberBlog, action == \"insert\", granted == false)\n"
"then\n"
"  check.grant();\n"
"end;]]>"
msgstr ""
"<![CDATA[rule InsertMemberBlog\n"
"  no-loop\n"
"  activation-group \"permissions\"\n"
"when\n"
"  principal: Principal()\n"
"  memberBlog: MemberBlog(member : member -> (member.getUsername().equals(principal.getName())))\n"
"  check: PermissionCheck(target == memberBlog, action == \"insert\", granted == false)\n"
"then\n"
"  check.grant();\n"
"end;]]>"

#. Tag: para
#: Security.xml:2559
#, no-c-format
msgid "This rule will grant the permission <literal>memberBlog:insert</literal> if the currently authenticated user (indicated by the <literal>Principal</literal> fact) has the same name as the member for which the blog entry is being created. The \"<literal>principal: Principal()</literal>\" structure that can be seen in the example code is a variable binding - it binds the instance of the <literal>Principal</literal> object from the working memory (placed there during authentication) and assigns it to a variable called <literal>principal</literal>. Variable bindings allow the value to be referred to in other places, such as the following line which compares the member's username to the <literal>Principal</literal> name. For more details, please refer to the JBoss Rules documentation."
msgstr "Questa regola concederà il permesso <literal>memberBlog:insert</literal> se l'utente attualmente autenticato (indicato dal fatto <literal>Principal</literal>) ha lo stesso nome del membro per il quale è stata creata la voce del blog. La riga \"<literal>principal: Principal()</literal>\" può essere vista nel codice di esempio come un collegamento con una variabile. Essa collega l'istanza dell'oggetto <literal>Principal</literal> nella working memory (posizionato durante l'autenticazione) e lo assegna ad una variabile chiamata <literal>principal</literal>. I collegamenti con le variabili consentono di fare riferimento al valore in altri posti, come nella riga successiva che confronta il nome dell'utente con il nome del <literal>Principal</literal>. Per maggiori dettagli fare riferimento alla documentazione di JBoss Rules."

#. Tag: para
#: Security.xml:2569
#, no-c-format
msgid "Finally, we need to install a listener class that integrates Seam security with your JPA provider."
msgstr "Infine abbiamo bisogno di installare una classe listener che integra la sicurezza Seam con la libreria JPA."

#. Tag: title
#: Security.xml:2575
#, no-c-format
msgid "Entity security with JPA"
msgstr "La sicurezza delle entità con JPA"

#. Tag: para
#: Security.xml:2577
#, no-c-format
msgid "Security checks for EJB3 entity beans are performed with an <literal>EntityListener</literal>. You can install this listener by using the following <literal>META-INF/orm.xml</literal> file:"
msgstr "I controlli di sicurezza sugli entity bean EJB3 sono eseguiti con un <literal>EntityListener</literal>. E' possibile installare questo listener usando il seguente file <literal>META-INF/orm.xml</literal>:"

#. Tag: programlisting
#: Security.xml:2582
#, no-c-format
msgid ""
"<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<entity-mappings xmlns=\"http://java.sun.com/xml/ns/persistence/orm\"\n"
"                 xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"                 xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd\"\n"
"                 version=\"1.0\">\n"
"\n"
"    <persistence-unit-metadata>\n"
"        <persistence-unit-defaults>\n"
"            <entity-listeners>\n"
"                <entity-listener class=\"org.jboss.seam.security.EntitySecurityListener\"/>\n"
"            </entity-listeners>\n"
"        </persistence-unit-defaults>\n"
"    </persistence-unit-metadata>\n"
"\n"
"</entity-mappings>]]>"
msgstr ""
"<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<entity-mappings xmlns=\"http://java.sun.com/xml/ns/persistence/orm\"\n"
"                 xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"                 xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd\"\n"
"                 version=\"1.0\">\n"
"\n"
"    <persistence-unit-metadata>\n"
"        <persistence-unit-defaults>\n"
"            <entity-listeners>\n"
"                <entity-listener class=\"org.jboss.seam.security.EntitySecurityListener\"/>\n"
"            </entity-listeners>\n"
"        </persistence-unit-defaults>\n"
"    </persistence-unit-metadata>\n"
"\n"
"</entity-mappings>]]>"

#. Tag: title
#: Security.xml:2587
#, no-c-format
msgid "Entity security with a Managed Hibernate Session"
msgstr "Sicurezza delle entità con una sessione Hibernate gestita"

#. Tag: para
#: Security.xml:2589
#, no-c-format
msgid "If you are using a Hibernate <literal>SessionFactory</literal> configured via Seam, and are using annotations, or <literal>orm.xml</literal>, then you don't need to do anything special to use entity security."
msgstr "Se si sta usando un <literal>SessionFactory</literal> di Hibernate configurato tramite Seam e si stanno usando le annotazioni oppure <literal>orm.xml</literal>, allora non c'è bisogno di fare niente di particolare per usare la sicurezza sulle entità."

#. Tag: title
#: Security.xml:2600
#, no-c-format
msgid "Typesafe Permission Annotations"
msgstr "Annotazioni tipizzate per i permessi"

#. Tag: para
#: Security.xml:2602
#, no-c-format
msgid "Seam provides a number of annotations that may be used as an alternative to <literal>@Restrict</literal>, which have the added advantage of providing compile-time safety as they don't support arbitrary EL expressions in the same way that <literal>@Restrict</literal> does."
msgstr "Seam fornisce una serie di annotazioni che possono essere usate come un'alternativa a <literal>@Restrict</literal> e che hanno l'ulteriore vantaggio di essere verificabili durante la compilazione, dato che non gestiscono espressioni EL arbitrarie nel modo in cui succede per la <literal>@Restrict</literal>."

#. Tag: para
#: Security.xml:2608
#, no-c-format
msgid "Out of the box, Seam comes with annotations for standard CRUD-based permissions, however it is a simple matter to add your own. The following annotations are provided in the <literal>org.jboss.seam.annotations.security</literal> package:"
msgstr "Così com'è, Seam contiene delle annotazioni per i permessi standard per le operazioni CRUD, comunque è solo questione di aggiungerne altre. Le seguenti annotazioni sono fornite nel pacchetto <literal>org.jboss.seam.annotations.security</literal>:"

#. Tag: para
#: Security.xml:2615
#, no-c-format
msgid "@Insert"
msgstr "@Insert"

#. Tag: para
#: Security.xml:2618
#, no-c-format
msgid "@Read"
msgstr "@Read"

#. Tag: para
#: Security.xml:2621
#, no-c-format
msgid "@Update"
msgstr "@Update"

#. Tag: para
#: Security.xml:2624
#, no-c-format
msgid "@Delete"
msgstr "@Delete"

#. Tag: para
#: Security.xml:2628
#, no-c-format
msgid "To use these annotations, simply place them on the method or parameter for which you wish to perform a security check. If placed on a method, then they should specify a target class for which the permission will be checked. Take the following example:"
msgstr "Per usare queste annotazioni basta metterle sul metodo o sul parametro per il quale si vuole eseguire il controllo di sicurezza. Se messe su un metodo, allora dovranno specificare la classe obiettivo per la quale il permesso deve essere controllato. Si prenda il seguente esempio:"

#. Tag: programlisting
#: Security.xml:2634
#, no-c-format
msgid ""
"<![CDATA[  @Insert(Customer.class)\n"
"  public void createCustomer() {\n"
"    ...\n"
"  }]]>"
msgstr ""
"<![CDATA[  @Insert(Customer.class)\n"
"  public void createCustomer() {\n"
"    ...\n"
"  }]]>"

#. Tag: para
#: Security.xml:2636
#, no-c-format
msgid "In this example, a permission check will be performed for the user to ensure that they have the rights to create new <literal>Customer</literal> objects. The target of the permission check will be <literal>Customer.class</literal> (the actual <literal>java.lang.Class</literal> instance itself), and the action is the lower case representation of the annotation name, which in this example is <literal>insert</literal>."
msgstr "In questo esempio un controllo di permessi viene fatto sull'utente per assicurarsi che abbia i diritti per creare un nuovo oggetto <literal>Customer</literal>. L'obiettivo del controllo di permessi sarà <literal>Customer.class</literal> (l'effettiva istanza di <literal>java.lang.Class</literal>) e l'azione è la rappresentazione a lettere minuscole del nome dell'annotazione, che in questo esempio è <literal>insert</literal>."

#. Tag: para
#: Security.xml:2643
#, no-c-format
msgid "It is also possible to annotate the parameters of a component method in the same way. If this is done, then it is not required to specify a permission target (as the parameter value itself will be the target of the permission check):"
msgstr "E' anche possibile annotare i parametri di un metodo di un componente allo stesso modo. Se viene fatto in questo modo non è richiesto di specificare l'obiettivo del permesso (dato che il valore stesso del parametro sarà l'obiettivo del controllo di permessi):"

#. Tag: programlisting
#: Security.xml:2648
#, no-c-format
msgid ""
"<![CDATA[  public void updateCustomer(@Update Customer customer) {\n"
"    ...\n"
"  }]]>"
msgstr ""
"<![CDATA[  public void updateCustomer(@Update Customer customer) {\n"
"    ...\n"
"  }]]>"

#. Tag: para
#: Security.xml:2650
#, no-c-format
msgid "To create your own security annotation, you simply need to annotate it with <literal>@PermissionCheck</literal>, for example:"
msgstr "Per creare una propria annotazione di sicurezza basta annotarla con <literal>@PermissionCheck</literal>, ad esempio:"

#. Tag: programlisting
#: Security.xml:2654
#, no-c-format
msgid ""
"<![CDATA[@Target({METHOD, PARAMETER})\n"
"@Documented\n"
"@Retention(RUNTIME)\n"
"@Inherited\n"
"@PermissionCheck\n"
"public @interface Promote {\n"
"   Class value() default void.class;\n"
"}]]>"
msgstr ""
"<![CDATA[@Target({METHOD, PARAMETER})\n"
"@Documented\n"
"@Retention(RUNTIME)\n"
"@Inherited\n"
"@PermissionCheck\n"
"public @interface Promote {\n"
"   Class value() default void.class;\n"
"}]]>"

#. Tag: para
#: Security.xml:2656
#, no-c-format
msgid "If you wish to override the default permisison action name (which is the lower case version of the annotation name) with another value, you can specify it within the <literal>@PermissionCheck</literal> annotation:"
msgstr "Se si vuole modificare il nome dell'azione di default del permesso (che è la versione a lettere minuscole del nome dell'annotazione) con un altro valore, è possibile specificarlo all'interno dell'annotazione <literal>@PermissionCheck</literal>:"

#. Tag: programlisting
#: Security.xml:2661
#, no-c-format
msgid "<![CDATA[@PermissionCheck(\"upgrade\")]]>"
msgstr "<![CDATA[@PermissionCheck(\"upgrade\")]]>"

#. Tag: title
#: Security.xml:2666
#, no-c-format
msgid "Typesafe Role Annotations"
msgstr "Annotazioni tipizzate per i ruoli"

#. Tag: para
#: Security.xml:2668
#, no-c-format
msgid "In addition to supporting typesafe permission annotation, Seam Security also provides typesafe role annotations that allow you to restrict access to component methods based on the role memberships of the currently authenticated user. Seam provides one such annotation out of the box, <literal>org.jboss.seam.annotations.security.Admin</literal>, used to restrict access to a method to users that are a member of the <literal>admin</literal> role (so long as your own application supports such a role). To create your own role annotations, simply meta-annotate them with <literal>org.jboss.seam.annotations.security.RoleCheck</literal>, like in the following example:"
msgstr "In aggiunta alla gestione tipizzata delle annotazioni sui permessi, la sicurezza di Seam fornisce anche le annotazioni tipizzate per i ruoli che consentono di limitare l'accesso ai metodi dei componenti in base all'appartenenza ad un ruolo dell'utente attualmente autenticato. Seam fornisce una di queste annotazioni già fatta, <literal>org.jboss.seam.annotations.security.Admin</literal>, usata per limitare l'accesso ad un metodo agli utenti che sono membri del ruolo <literal>admin</literal> (purché l'applicazione gestisca un tale ruolo). Per creare le proprie annotazioni per i ruoli basta meta-annotarle con <literal>org.jboss.seam.annotations.security.RoleCheck</literal>, come nel seguente esempio:"

#. Tag: programlisting
#: Security.xml:2677
#, no-c-format
msgid ""
"<![CDATA[@Target({METHOD})\n"
"@Documented\n"
"@Retention(RUNTIME)\n"
"@Inherited\n"
"@RoleCheck\n"
"public @interface User { \n"
"}]]>"
msgstr ""
"<![CDATA[@Target({METHOD})\n"
"@Documented\n"
"@Retention(RUNTIME)\n"
"@Inherited\n"
"@RoleCheck\n"
"public @interface User { \n"
"}]]>"

#. Tag: para
#: Security.xml:2679
#, no-c-format
msgid "Any methods subsequently annotated with the <literal>@User</literal> annotation as shown in the above example will be automatically intercepted and the user checked for the membership of the corresponding role name (which is the lower case version of the annotation name, in this case <literal>user</literal>)."
msgstr "Qualsiasi metodo successivamente annotato con l'annotazione <literal>@User</literal> come mostrata nell'esempio precedente, sarà automaticamente intercettato e sarà verificata l'appartenenza dell'utente al ruolo con il nome corrispondente (che è la versione a lettere minuscole del nome dell'annotazione, in questo caso <literal>user</literal>)."

#. Tag: title
#: Security.xml:2688
#, no-c-format
msgid "The Permission Authorization Model"
msgstr "Il modello di autorizzazione dei permessi"

#. Tag: para
#: Security.xml:2690
#, no-c-format
msgid "Seam Security provides an extensible framework for resolving application permissions. The following class diagram shows an overview of the main components of the permission framework:"
msgstr "La sicurezza di Seam fornisce un framework espandibile per risolvere i permessi dell'applicazione. Il seguente diagramma di classi mostra una panoramica dei componenti principali del framework dei permessi:"

#. Tag: para
#: Security.xml:2704
#, no-c-format
msgid "The relevant classes are explained in more detail in the following sections."
msgstr "Le classi rilevanti sono spiegate con maggiore dettaglio nel seguente paragrafo."

#. Tag: title
#: Security.xml:2709
#, no-c-format
msgid "PermissionResolver"
msgstr "PermissionResolver"

#. Tag: para
#: Security.xml:2711
#, no-c-format
msgid "This is actually an interface, which provides methods for resolving individual object permissions. Seam provides the following built-in <literal>PermissionResolver</literal> implementations, which are described in more detail later in the chapter:"
msgstr "Questa è in realtà un'interfaccia che fornisce i metodi per risolvere i singoli permessi sugli oggetti. Seam fornisce le seguenti implementazioni già fatte di <literal>PermissionResolver</literal>, che sono descritte in maggiore dettaglio più avanti in questo capitolo:"

#. Tag: para
#: Security.xml:2719
#, no-c-format
msgid "<literal>RuleBasedPermissionResolver</literal> - This permission resolver uses Drools to resolve rule-based permission checks."
msgstr "<literal>RuleBasedPermissionResolver</literal> - Questo risolutore di permessi usa Drools per risolvere i controlli di permesso basati sulle regole."

#. Tag: para
#: Security.xml:2723
#, no-c-format
msgid "<literal>PersistentPermissionResolver</literal> - This permission resolver stores object permissions in a persistent store, such as a relational database."
msgstr "<literal>PersistentPermissionResolver</literal> - Questo risolutore di permessi memorizza gli oggetti permesso in un dispositivo persistente, come un database relazionale."

#. Tag: title
#: Security.xml:2729
#, no-c-format
msgid "Writing your own PermissionResolver"
msgstr "Scrivere il proprio PermissionResolver"

#. Tag: para
#: Security.xml:2731
#, no-c-format
msgid "It is very simple to implement your own permission resolver. The <literal>PermissionResolver</literal> interface defines only two methods that must be implemented, as shown by the following table. By deploying your own <literal>PermissionResolver</literal> implementation in your Seam project, it will be automatically scanned during deployment and registered with the default <literal>ResolverChain</literal>."
msgstr "E' molto semplice implementare il proprio risolutore di permessi. L'interfaccia <literal>PermissionResolver</literal> definisce solo due metodi che devono essere implementati, come mostra la seguente tabella. Includendo la propria implementazione di <literal>PermissionResolver</literal> nel proprio progetto Seam, essa sarà automaticamente rilevata durante l'esecuzione e registrata nel <literal>ResolverChain</literal> predefinito."

#. Tag: title
#: Security.xml:2739
#, no-c-format
msgid "PermissionResolver interface"
msgstr "L'interfaccia PermissionResolver"

#. Tag: para
#: Security.xml:2750
#: Security.xml:3174
#: Security.xml:3795
#, no-c-format
msgid "Return type"
msgstr "Tipo restituito"

#. Tag: literal
#: Security.xml:2771
#, no-c-format
msgid "hasPermission(Object target, String action)"
msgstr "hasPermission(Object target, String action)"

#. Tag: para
#: Security.xml:2775
#, no-c-format
msgid "This method must resolve whether the currently authenticated user (obtained via a call to <literal>Identity.getPrincipal()</literal>) has the permission specified by the <literal>target</literal> and <literal>action</literal> parameters. It should return <literal>true</literal> if the user has the permission, or <literal>false</literal> if they don't."
msgstr "Questo metodo deve stabilire se l'utente attualmente autenticato (ottenuto tramite una chiamata a <literal>Identity.getPrincipal()</literal>) ha il permesso specificato dai parametri <literal>target</literal> e <literal>action</literal>. Deve restituire <literal>true</literal> se l'utente ha il permesso, oppure <literal>false</literal> se non ce l'ha."

#. Tag: literal
#: Security.xml:2787
#, no-c-format
msgid "void"
msgstr "void"

#. Tag: literal
#: Security.xml:2792
#, no-c-format
msgid "filterSetByAction(Set&lt;Object&gt; targets, String action)"
msgstr "filterSetByAction(Set&lt;Object&gt; targets, String action)"

#. Tag: para
#: Security.xml:2796
#, no-c-format
msgid "This method should remove any objects from the specified set, that would return <literal>true</literal> if passed to the <literal>hasPermission()</literal> method with the same <literal>action</literal> parameter value."
msgstr "Questo metodo deve rimuovere dall'insieme specificato tutti gli oggetti per i quali si otterrebbe <literal>true</literal> se venissero passati al metodo <literal>hasPermission()</literal> con lo stesso valore del parametro <literal>action</literal>."

#. Tag: para
#: Security.xml:2809
#, no-c-format
msgid "As they are cached in the user's session, any custom <literal>PermissionResolver</literal> implementations must adhere to a couple of restrictions. Firstly, they may not contain any state that is finer-grained than session scope (and the scope of the component itself should either be application or session). Secondly, they must not use dependency injection as they may be accessed from multiple threads simultaneously. In fact, for performance reasons it is recommended that they are annotated with <literal>@BypassInterceptors</literal> to bypass Seam's interceptor stack altogether."
msgstr "Essendo conservati nella sessione dell'utente, ogni implementazione di <literal>PermissionResolver</literal> deve aderire ad un paio di restrizioni. In primo luogo, non possono contenere alcuna informazione di stato che abbia una visibilità inferiore a session (e la visibilità del componente stesso deve essere o application oppure session). In secondo luogo, non devono usare la dependency injection poiché ci potrebbero essere accessi da più thread contemporaneamente. Infatti, per ragioni di prestazioni, è raccomandabile annotare con <literal>@BypassInterceptors</literal> per evitare del tutto l'insieme degli intercettori Seam."

#. Tag: title
#: Security.xml:2824
#, no-c-format
msgid "ResolverChain"
msgstr "ResolverChain"

#. Tag: para
#: Security.xml:2826
#, no-c-format
msgid "A <literal>ResolverChain</literal> contains an ordered list of <literal>PermissionResolver</literal>s, for the purpose of resolving object permissions for a particular object class or permission target."
msgstr "Un <literal>ResolverChain</literal> contiene un elenco ordinato di <literal>PermissionResolver</literal>, con lo scopo di risolvere i permessi sugli oggetti di una determinata classe oppure i permessi obiettivo."

#. Tag: para
#: Security.xml:2831
#, no-c-format
msgid "The default <literal>ResolverChain</literal> consists of all permission resolvers discovered during application deployment. The <literal>org.jboss.seam.security.defaultResolverChainCreated</literal> event is raised (and the <literal>ResolverChain</literal> instance passed as an event parameter) when the default <literal>ResolverChain</literal> is created. This allows additional resolvers that for some reason were not discovered during deployment to be added, or for resolvers that are in the chain to be re-ordered or removed."
msgstr "La <literal>ResolverChain</literal> di default consiste di tutti i risolutori di permessi rilevati durante l'avvio dell'applicazione. L'evento <literal>org.jboss.seam.security.defaultResolverChainCreated</literal> viene lanciato (e l'istanza di <literal>ResolverChain</literal> viene passata come parametro dell'evento) quando il <literal>ResolverChain</literal> di default viene creato. Questo consente di aggiungere ulteriori risolutori che per qualche ragione non erano stati rilevati durante l'avvio, oppure di riordinare o rimuovere i risolutori che sono nell'elenco."

#. Tag: para
#: Security.xml:2840
#, no-c-format
msgid "The following sequence diagram shows the interaction between the components of the permission framework during a permission check (explanation follows). A permission check can originate from a number of possible sources, for example - the security interceptor, the <literal>s:hasPermission</literal> EL function, or via an API call to <literal>Identity.checkPermission</literal>:"
msgstr "Il seguente diagramma di sequenza mostra l'interazione tra i componenti del framework dei permessi durante la verifica di un permesso (segue la spiegazione). Una verifica di permesso può essere originata da una serie di possibili fonti, ad esempio gli intercettori di sicurezza, la funzione EL <literal>s:hasPermission</literal>, oppure tramite una chiamata alla API <literal>Identity.checkPermission</literal>:"

#. Tag: para
#: Security.xml:2858
#, no-c-format
msgid "1. A permission check is initiated somewhere (either in code or via an EL expression) resulting in a call to <literal>Identity.hasPermission()</literal>."
msgstr "1. Una verifica di permesso viene iniziata da qualche parte (dal codice o tramite un'espressione EL) provocando una chiamata a <literal>Identity.hasPermission()</literal>."

#. Tag: para
#: Security.xml:2864
#, no-c-format
msgid "1.1. <literal>Identity</literal> invokes <literal>PermissionMapper.resolvePermission()</literal>, passing in the permission to be resolved."
msgstr "1.1. <literal>Identity</literal> chiama <literal>PermissionMapper.resolvePermission()</literal>, passando il permesso che deve essere risolto."

#. Tag: para
#: Security.xml:2871
#, no-c-format
msgid "1.1.1. <literal>PermissionMapper</literal> maintains a <literal>Map</literal> of <literal>ResolverChain</literal> instances, keyed by class. It uses this map to locate the correct <literal>ResolverChain</literal> for the permission's target object. Once it has the correct <literal>ResolverChain</literal>, it retrieves the list of <literal>PermissionResolver</literal>s it contains via a call to <literal>ResolverChain.getResolvers()</literal>."
msgstr "1.1.1. <literal>PermissionMapper</literal> conserva una <literal>Map</literal> di istanze di <literal>ResolverChain</literal>, indicizzate per classe. Usa questa mappa per identificare la giusta <literal>ResolverChain</literal> per l'oggetto obiettivo del permesso. Una volta che ha la giusta <literal>ResolverChain</literal>, recupera l'elenco dei <literal>PermissionResolver</literal> che contiene tramite una chiamata a <literal>ResolverChain.getResolvers()</literal>."

#. Tag: para
#: Security.xml:2881
#, no-c-format
msgid "1.1.2. For each <literal>PermissionResolver</literal> in the <literal>ResolverChain</literal>, the <literal>PermissionMapper</literal> invokes its <literal>hasPermission()</literal> method, passing in the permission instance to be checked. If any of the <literal>PermissionResolver</literal>s return <literal>true</literal>, then the permission check has succeeded and the <literal>PermissionMapper</literal> also returns <literal>true</literal> to <literal>Identity</literal>. If none of the <literal>PermissionResolver</literal>s return true, then the permission check has failed."
msgstr "1.1.2. Per ciascun <literal>PermissionResolver</literal> nel <literal>ResolverChain</literal>, il <literal>PermissionMapper</literal> chiama il suo metodo <literal>hasPermission()</literal>, passando l'istanza del permesso da verificare. Se qualcuno dei <literal>PermissionResolver</literal> restituisce <literal>true</literal>, allora la verifica del permesso ha avuto successo e il <literal>PermissionMapper</literal> restituisce anch'esso <literal>true</literal> a <literal>Identity</literal>. Se nessuno dei <literal>PermissionResolver</literal> restituisce <literal>true</literal>, allora la verifica del permesso è fallita."

#. Tag: title
#: Security.xml:2897
#, no-c-format
msgid "RuleBasedPermissionResolver"
msgstr "RuleBasedPermissionResolver"

#. Tag: para
#: Security.xml:2899
#, no-c-format
msgid "One of the built-in permission resolvers provided by Seam, <literal>RuleBasedPermissionResolver</literal> allows permissions to be evaluated based on a set of Drools (JBoss Rules) security rules. A couple of the advantages of using a rule engine are 1) a centralized location for the business logic that is used to evaluate user permissions, and 2) speed - Drools uses very efficient algorithms for evaluating large numbers of complex rules involving multiple conditions."
msgstr "Uno dei risolutori di permesso già fatti forniti da Seam, <literal>RuleBasedPermissionResolver</literal>, consente di valutare i permessi in base ad un insieme di regole di sicurezza Drools (JBoss Rules). Un paio di vantaggi nell'uso di un motore di regole sono: 1) una posizione centralizzata della logica di gestione che è usata per valutare i permessi degli utenti; 2) la velocità, Drools usa algoritmi molto efficienti per valutare grandi quantità di regole complesse comprendenti condizioni multiple."

#. Tag: title
#: Security.xml:2908
#, no-c-format
msgid "Requirements"
msgstr "Requisiti"

#. Tag: para
#: Security.xml:2910
#, no-c-format
msgid "If using the rule-based permission features provided by Seam Security, the following jar files are required by Drools to be distributed with your project:"
msgstr "Se si usa la funzione dei permessi basati sulle regole fornita dalla sicurezza di Seam, Drools richiede che i seguenti file jar siano distribuiti insieme al progetto:"

#. Tag: para
#: Security.xml:2917
#, no-c-format
msgid "knowledge-api.jar"
msgstr "knowledge-api.jar"

#. Tag: para
#: Security.xml:2920
#, no-c-format
msgid "drools-compiler.jar"
msgstr "drools-compiler.jar"

#. Tag: para
#: Security.xml:2923
#, no-c-format
msgid "drools-core.jar"
msgstr "drools-core.jar"

#. Tag: para
#: Security.xml:2926
#, no-c-format
msgid "drools-decisiontables.jar"
msgstr "drools-decisiontables.jar"

#. Tag: para
#: Security.xml:2929
#, no-c-format
msgid "drools-templates.jar"
msgstr "drools-templates.jar"

#. Tag: para
#: Security.xml:2932
#, no-c-format
msgid "janino.jar"
msgstr "janino.jar"

#. Tag: para
#: Security.xml:2935
#, no-c-format
msgid "antlr-runtime.jar"
msgstr "antlr-runtime.jar"

#. Tag: para
#: Security.xml:2938
#, no-c-format
msgid "mvel2.jar"
msgstr "mvel2.jar"

#. Tag: title
#: Security.xml:2945
#: Security.xml:3137
#, no-c-format
msgid "Configuration"
msgstr "Configurazione"

#. Tag: para
#: Security.xml:2947
#, no-c-format
msgid "The configuration for <literal>RuleBasedPermissionResolver</literal> requires that a Drools rule base is first configured in <literal>components.xml</literal>. By default, it expects that the rule base is named <literal>securityRules</literal>, as per the following example:"
msgstr "La configurazione per <literal>RuleBasedPermissionResolver</literal> richiede che una base di regole venga prima configurata in <literal>components.xml</literal>. Di default questa base di regole viene chiamata <literal>securityRules</literal>, come nel seguente esempio:"

#. Tag: programlisting
#: Security.xml:2953
#, no-c-format
msgid ""
"<![CDATA[<components xmlns=\"http://jboss.org/schema/seam/components\"\n"
"              xmlns:core=\"http://jboss.org/schema/seam/core\"\n"
"              xmlns:security=\"http://jboss.org/schema/seam/security\"\n"
"              xmlns:drools=\"http://jboss.org/schema/seam/drools\"\n"
"              xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"              xsi:schemaLocation=\n"
"                  \"http://jboss.org/schema/seam/core http://jboss.org/schema/seam/core-2.3.xsd\n"
"                   http://jboss.org/schema/seam/components http://jboss.org/schema/seam/components-2.3.xsd\n"
"                   http://jboss.org/schema/seam/drools http://jboss.org/schema/seam/drools-2.3.xsd\n"
"                   http://jboss.org/schema/seam/security http://jboss.org/schema/seam/security-2.3.xsd\">\n"
"  \n"
"     <drools:rule-base name=\"securityRules\">\n"
"         <drools:rule-files>\n"
"             <value>/META-INF/security.drl</value>\n"
"         </drools:rule-files>\n"
"     </drools:rule-base>\n"
"  \n"
"  </components>]]>"
msgstr ""
"<![CDATA[<components xmlns=\"http://jboss.org/schema/seam/components\"\n"
"              xmlns:core=\"http://jboss.org/schema/seam/core\"\n"
"              xmlns:security=\"http://jboss.org/schema/seam/security\"\n"
"              xmlns:drools=\"http://jboss.org/schema/seam/drools\"\n"
"              xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"              xsi:schemaLocation=\n"
"                  \"http://jboss.org/schema/seam/core http://jboss.org/schema/seam/core-2.3.xsd\n"
"                   http://jboss.org/schema/seam/components http://jboss.org/schema/seam/components-2.3.xsd\n"
"                   http://jboss.org/schema/seam/drools http://jboss.org/schema/seam/drools-2.3.xsd\n"
"                   http://jboss.org/schema/seam/security http://jboss.org/schema/seam/security-2.3.xsd\">\n"
"  \n"
"     <drools:rule-base name=\"securityRules\">\n"
"         <drools:rule-files>\n"
"             <value>/META-INF/security.drl</value>\n"
"         </drools:rule-files>\n"
"     </drools:rule-base>\n"
"  \n"
"  </components>]]>"

#. Tag: para
#: Security.xml:2955
#, no-c-format
msgid "The default rule base name can be overridden by specifying the <literal>security-rules</literal> property for <literal>RuleBasedPermissionResolver</literal>:"
msgstr "Il nome predefinito della base di regole può essere modificato specificando la proprietà <literal>security-rules</literal> per <literal>RuleBasedPermissionResolver</literal>:"

#. Tag: programlisting
#: Security.xml:2960
#, no-c-format
msgid ""
"<![CDATA[\n"
"  <security:rule-based-permission-resolver security-rules=\"#{prodSecurityRules}\"/>]]>"
msgstr ""
"<![CDATA[\n"
"  <security:rule-based-permission-resolver security-rules=\"#{prodSecurityRules}\"/>]]>"

#. Tag: para
#: Security.xml:2962
#, no-c-format
msgid "Once the <literal>RuleBase</literal> component is configured, it's time to write the security rules."
msgstr "Una volta che il componente <literal>RuleBase</literal> è configurato, è il momento di scrivere le regole di sicurezza."

#. Tag: title
#: Security.xml:2968
#, no-c-format
msgid "Writing Security Rules"
msgstr "Scrivere le regole di sicurezza"

#. Tag: para
#: Security.xml:2970
#, no-c-format
msgid "The first step to writing security rules is to create a new rule file in the <literal>/META-INF</literal> directory of your application's jar file. Usually this file would be named something like <literal>security.drl</literal>, however you can name it whatever you like as long as it is configured correspondingly in <literal>components.xml</literal>."
msgstr "Il primo passo per scrivere delle regole di sicurezza è di creare un nuovo file di regole nella cartella <literal>/META-INF</literal> del file jar dell'applicazione. Di solito questo file dovrebbe essere chiamato qualcosa come <literal>security.drl</literal>, comunque lo si può chiamare nel modo che si preferisce purché sia configurato in maniera corrispondente in <literal>components.xml</literal>."

#. Tag: para
#: Security.xml:2977
#, no-c-format
msgid "So what should the security rules file contain? At this stage it might be a good idea to at least skim through the Drools documentation, however to get started here's an extremely simple example:"
msgstr "Dunque, che cosa deve contenere il file delle regole di sicurezza? A questo punto potrebbe essere una buona idea almeno sbirciare nella documentazione Drools, comunque per partire ecco un esempio estremamente semplice:"

#. Tag: programlisting
#: Security.xml:2982
#, no-c-format
msgid ""
"<![CDATA[package MyApplicationPermissions;\n"
"  \n"
"  import org.jboss.seam.security.permission.PermissionCheck;\n"
"  import org.jboss.seam.security.Role;\n"
"  \n"
"  rule CanUserDeleteCustomers\n"
"  when\n"
"    c: PermissionCheck(target == \"customer\", action == \"delete\")\n"
"    Role(name == \"admin\")\n"
"  then\n"
"    c.grant();\n"
"  end]]>"
msgstr ""
"<![CDATA[package MyApplicationPermissions;\n"
"  \n"
"  import org.jboss.seam.security.permission.PermissionCheck;\n"
"  import org.jboss.seam.security.Role;\n"
"  \n"
"  rule CanUserDeleteCustomers\n"
"  when\n"
"    c: PermissionCheck(target == \"customer\", action == \"delete\")\n"
"    Role(name == \"admin\")\n"
"  then\n"
"    c.grant();\n"
"  end]]>"

#. Tag: para
#: Security.xml:2984
#, no-c-format
msgid "Let's break this down step by step. The first thing we see is the package declaration. A package in Drools is essentially a collection of rules. The package name can be anything you want - it doesn't relate to anything else outside the scope of the rule base."
msgstr "Dividiamolo passo per passo. La prima cosa che vediamo è la dichiarazione del pacchetto. Un pacchetto in Drools è essenzialmente una collezione di regole. Il nome del pacchetto può essere qualsiasi, non è in relazione con niente che sia al di fuori della visibilità della base di regole."

#. Tag: para
#: Security.xml:2990
#, no-c-format
msgid "The next thing we can notice is a couple of import statements for the <literal>PermissionCheck</literal> and <literal>Role</literal> classes. These imports inform the rules engine that we'll be referencing these classes within our rules."
msgstr "La cosa successiva che possiano notare è un paio di dichiarazioni <literal>import</literal> per le classi <literal>PermissionCheck</literal> e <literal>Role</literal>. Questi <literal>import</literal> informano il motore di regole che all'interno delle nostre regole faremo riferimento a queste classi."

#. Tag: para
#: Security.xml:2996
#, no-c-format
msgid "Finally we have the code for the rule. Each rule within a package should be given a unique name (usually describing the purpose of the rule). In this case our rule is called <literal>CanUserDeleteCustomers</literal> and will be used to check whether a user is allowed to delete a customer record."
msgstr "Infine abbiamo il codice della regola. Ogni regola all'interno di un pacchetto deve avere un nome univoco (di solito descrive lo scopo della regola). In questo caso la nostra regola si chiama <literal>CanUserDeleteCustomers</literal> e verrà usata per verificare se ad un utente è consentito di cancellare un record relativo ad un cliente."

#. Tag: para
#: Security.xml:3002
#, no-c-format
msgid "Looking at the body of the rule definition we can notice two distinct sections. Rules have what is known as a left hand side (LHS) and a right hand side (RHS). The LHS consists of the conditional part of the rule, i.e. a list of conditions which must be satisfied for the rule to fire. The LHS is represented by the <literal>when</literal> section. The RHS is the consequence, or action section of the rule that will only be fired if all of the conditions in the LHS are met. The RHS is represented by the <literal>then</literal> section. The end of the rule is denoted by the <literal>end</literal> line."
msgstr "Guardando il corpo della definizione della regola si possono notare due distinte sezioni. Le regole hanno quello che è noto come lato sinistro (LHS, left hand side) e un lato destro (RHS, right hand side). Il lato sinistro consiste nella parte condizionale della regola, cioè l'elenco delle condizioni che devono essere soddisfatte affinché si applichi la regola. Il lato sinistro è rappresentato dalla sezione <literal>when</literal>. Il lato destro è la conseguenza, o la parte di azione della regola che si applica solo se tutte le condizioni del lato sinistro sono verificate. Il lato destro è rappresentato dalla sezione <literal>then</literal>. La fine della regola è stabilita dalla linea <literal>end</literal>."

#. Tag: para
#: Security.xml:3011
#, no-c-format
msgid "If we look at the LHS of the rule, we see two conditions listed there. Let's examine the first condition:"
msgstr "Se guardiamo la parte sinistra della regola vediamo che ci sono due condizioni. Esaminiamo la prima condizione:"

#. Tag: programlisting
#: Security.xml:3015
#, no-c-format
msgid "<![CDATA[c: PermissionCheck(target == \"customer\", action == \"delete\")]]>"
msgstr "<![CDATA[c: PermissionCheck(target == \"customer\", action == \"delete\")]]>"

#. Tag: para
#: Security.xml:3017
#, no-c-format
msgid "In plain english, this condition is stating that there must exist a <literal>PermissionCheck</literal> object with a <literal>target</literal> property equal to \"customer\", and an <literal>action</literal> property equal to \"delete\" within the working memory."
msgstr "Letta in inglese questa condizione dice che all'interno della working memory deve esistere un oggetto <literal>PermissionCheck</literal> con una proprietà <literal>target</literal> uguale a \"customer\" e una proprietà <literal>action</literal> uguale a \"delete\"."

#. Tag: para
#: Security.xml:3023
#, no-c-format
msgid "So what is the working memory? Also known as a \"stateful session\" in Drools terminology, the working memory is a session-scoped object that contains the contextual information that is required by the rules engine to make a decision about a permission check. Each time the <literal>hasPermission()</literal> method is called, a temporary <literal>PermissionCheck</literal> object, or <emphasis>Fact</emphasis>, is inserted into the working memory. This <literal>PermissionCheck</literal> corresponds exactly to the permission that is being checked, so for example if you call <literal>hasPermission(\"account\", \"create\")</literal> then a <literal>PermissionCheck</literal> object with a <literal>target</literal> equal to \"account\" and <literal>action</literal> equal to \"create\" will be inserted into the working memory for the duration of the permission check."
msgstr "Dunque cos'è la working memory? Nota anche come \"stateful session\" nella terminologia Drools, la working memory è un oggetto collegato alla sessione che contiene le informazioni contestuali che sono richieste dal motore di regole per prendere una decisione sul controllo di permesso. Ogni volta che il metodo <literal>hasPermission()</literal> viene chiamato, viene creato un oggetto, o <emphasis>Fatto</emphasis>, temporaneo <literal>PermissionCheck</literal>, e viene inserito nella working memory. Questo <literal>PermissionCheck</literal> corrisponde esattamente al permesso che si sta controllando, così, ad esempio, se viene chiamato <literal>hasPermission(\"account\", \"create\")</literal> allora verrà inserito nella working memory un oggetto <literal>PermissionCheck</literal> con <literal>target</literal> uguale a \"account\" e <literal>action</literal> uguale a \"create\", per la durata del controllo di permesso."

#. Tag: para
#: Security.xml:3035
#, no-c-format
msgid "Besides the <literal>PermissionCheck</literal> facts, there is also a <literal>org.jboss.seam.security.Role</literal> fact for each of the roles that the authenticated user is a member of. These <literal>Role</literal> facts are synchronized with the user's authenticated roles at the beginning of every permission check. As a consequence, any <literal>Role</literal> object that is inserted into the working memory during the course of a permission check will be removed before the next permission check occurs, if the authenticated user is not actually a member of that role. Besides the <literal>PermissionCheck</literal> and <literal>Role</literal> facts, the working memory also contains the <literal>java.security.Principal</literal> object that was created as a result of the authentication process."
msgstr "Accanto al fatto <literal>PermissionCheck</literal> c'è anche un fatto <literal>org.jboss.seam.security.Role</literal> per ogni ruolo di cui l'utente autenticato è membro. Questi fatti <literal>Role</literal> sono sincronizzati con i ruoli dell'utente autenticato all'inizio di ogni controllo di permesso. Di conseguenza qualsiasi oggetto <literal>Role</literal> che venisse inserito nella working memory nel corso del controllo di permesso sarebbe rimosso prima che avvenga il controllo di permesso successivo, a meno che l'utente autenticato non sia effettivamente membro di quel ruolo. Insieme ai fatti <literal>PermissionCheck</literal> e <literal>Role</literal> la working memory contiene anche l'oggetto <literal>java.security.Principal</literal> che era stato creato come risultato del processo di autenticazione."

#. Tag: para
#: Security.xml:3046
#, no-c-format
msgid "It is also possible to insert additional long-lived facts into the working memory by calling <literal>RuleBasedPermissionResolver.instance().getSecurityContext().insert()</literal>, passing the object as a parameter. The exception to this is <literal>Role</literal> objects, which as already discussed are synchronized at the start of each permission check."
msgstr "E' anche possibile inserire ulteriori fatti nella working memory chiamando <literal>RuleBasedPermissionResolver.instance().getSecurityContext().insert()</literal>, passando l'oggetto come parametro. Fanno eccezione a questo gli oggetti <literal>Role</literal> che, come già detto, sono sincronizzati all'inizio di ciascun controllo di permesso."

#. Tag: para
#: Security.xml:3053
#, no-c-format
msgid "Getting back to our simple example, we can also notice that the first line of our LHS is prefixed with <literal>c:</literal>. This is a variable binding, and is used to refer back to the object that is matched by the condition (in this case, the <literal>PermissionCheck</literal>). Moving on to the second line of our LHS, we see this:"
msgstr "Tornando al nostro esempio, possiamo anche notare che la prima linea della nostra parte sinistra ha il prefisso <literal>c:</literal>. Questa è una dichiarazione di variabile ed è usata per fare riferimento all'oggetto rilevato dalla condizione (in questo caso il <literal>PermissionCheck</literal>). Passando alla seconda linea della nostra parte sinistra vediamo questo:"

#. Tag: programlisting
#: Security.xml:3060
#, no-c-format
msgid "<![CDATA[Role(name == \"admin\")]]>"
msgstr "<![CDATA[Role(name == \"admin\")]]>"

#. Tag: para
#: Security.xml:3062
#, no-c-format
msgid "This condition simply states that there must be a <literal>Role</literal> object with a <literal>name</literal> of \"admin\" within the working memory. As already mentioned, user roles are inserted into the working memory at the beginning of each permission check. So, putting both conditions together, this rule is essentially saying \"I will fire if you are checking for the <literal>customer:delete</literal> permission and the user is a member of the <literal>admin</literal> role\"."
msgstr "Questa condizione dichiara semplicemente che ci deve essere un oggetto <literal>Role</literal> con un <literal>name</literal> uguale ad \"admin\" nella working memory. Come già menzionato, i ruoli dell'utente sono inseriti nella working memory all'inizio di ogni controllo di permesso. Così, mettendo insieme entrambe le condizioni, questa regola in pratica dice \"mi attiverò quando ci sarà un controllo per il permesso <literal>customer:delete</literal> e l'utente è un membro del ruolo <literal>admin</literal>\"."

#. Tag: para
#: Security.xml:3070
#, no-c-format
msgid "So what is the consequence of the rule firing? Let's take a look at the RHS of the rule:"
msgstr "Quindi qual è la conseguenza dell'attivazione della regola? Diamo un'occhiata alla parte destra della regola:"

#. Tag: programlisting
#: Security.xml:3074
#, no-c-format
msgid "<![CDATA[c.grant()]]>"
msgstr "<![CDATA[c.grant()]]>"

#. Tag: para
#: Security.xml:3076
#, no-c-format
msgid "The RHS consists of Java code, and in this case is invoking the <literal>grant()</literal> method of the <literal>c</literal> object, which as already mentioned is a variable binding for the <literal>PermissionCheck</literal> object. Besides the <literal>name</literal> and <literal>action</literal> properties of the <literal>PermissionCheck</literal> object, there is also a <literal>granted</literal> property which is initially set to <literal>false</literal>. Calling <literal>grant()</literal> on a <literal>PermissionCheck</literal> sets the <literal>granted</literal> property to <literal>true</literal>, which means that the permission check was successful, allowing the user to carry out whatever action the permission check was intended for."
msgstr "La parte destra è costituita da codice Java e, in questo caso, esso invoca il metodo <literal>grant()</literal> dell'oggetto <literal>c</literal> il quale, come già detto, è una variabile che rappresenta l'oggetto <literal>PermissionCheck</literal>. Insieme alle proprietà <literal>name</literal> e <literal>action</literal>, nell'oggetto <literal>PermissionCheck</literal> c'è anche una proprietà <literal>granted</literal> che inizialmente è impostata a <literal>false</literal>. Chiamando <literal>grant()</literal> su un <literal>PermissionCheck</literal> la proprietà <literal>granted</literal> viene impostata a <literal>true</literal>, il che significa che il controllo di permesso è andato a buon fine, consentendo all'utente di portare avanti qualsiasi azione per cui il controlo di permesso era stato inteso."

#. Tag: title
#: Security.xml:3090
#, no-c-format
msgid "Non-String permission targets"
msgstr "Permessi con obiettivi non stringa"

#. Tag: para
#: Security.xml:3092
#, no-c-format
msgid "So far we have only seen permission checks for String-literal permission targets. It is of course also possible to write security rules for permission targets of more complex types. For example, let's say that you wish to write a security rule to allow your users to create blog comments. The following rule demonstrates how this may be expressed, by requiring the target of the permission check to be an instance of <literal>MemberBlog</literal>, and also requiring that the currently authenticated user is a member of the <literal>user</literal> role:"
msgstr "Finora abbiamo visto solo controlli di permesso per obiettivi di tipo stringa. E' naturalmente possibile scrivere regole di sicurezza anche per obiettivi del permesso di tipo più complesso. Ad esempio, supponiamo che si voglia scrivere una regola di sicurezza che consenta agli utenti di creare un commento in un blog. La seguente regola mostra come questo possa essere espresso, richiedendo che l'obiettivo del controllo di permesso sia un'istanza di <literal>MemberBlog</literal> e anche che l'utente correntemente autenticato sia un membro del ruolo <literal>user</literal>:"

#. Tag: programlisting
#: Security.xml:3101
#, no-c-format
msgid ""
"<![CDATA[rule CanCreateBlogComment\n"
"  no-loop\n"
"  activation-group \"permissions\"\n"
"when\n"
"  blog: MemberBlog()\n"
"  check: PermissionCheck(target == blog, action == \"create\", granted == false)\n"
"  Role(name == \"user\")\n"
"then\n"
"  check.grant();\n"
"end\n"
"]]>"
msgstr ""
"<![CDATA[rule CanCreateBlogComment\n"
"  no-loop\n"
"  activation-group \"permissions\"\n"
"when\n"
"  blog: MemberBlog()\n"
"  check: PermissionCheck(target == blog, action == \"create\", granted == false)\n"
"  Role(name == \"user\")\n"
"then\n"
"  check.grant();\n"
"end\n"
"]]>"

#. Tag: title
#: Security.xml:3106
#, no-c-format
msgid "Wildcard permission checks"
msgstr "Controlli di permesso "

#. Tag: para
#: Security.xml:3108
#, no-c-format
msgid "It is possible to implement a wildcard permission check (which allows all actions for a given permission target), by omitting the <literal>action</literal> constraint for the <literal>PermissionCheck</literal> in your rule, like this:"
msgstr "E' possibile realizzare dei controlli di permesso (che consentono l'accesso a tutte le funzioni per un determinato obiettivo) basati su wildcard omettendo il vincolo <literal>action</literal> per il <literal>PermissionCheck</literal> nella regola, in questo modo:"

#. Tag: programlisting
#: Security.xml:3114
#, no-c-format
msgid ""
"<![CDATA[rule CanDoAnythingToCustomersIfYouAreAnAdmin\n"
"when\n"
"  c: PermissionCheck(target == \"customer\")\n"
"  Role(name == \"admin\")\n"
"then\n"
"  c.grant();\n"
"end;\n"
"        ]]>"
msgstr ""
"<![CDATA[rule CanDoAnythingToCustomersIfYouAreAnAdmin\n"
"when\n"
"  c: PermissionCheck(target == \"customer\")\n"
"  Role(name == \"admin\")\n"
"then\n"
"  c.grant();\n"
"end;\n"
"        ]]>"

#. Tag: para
#: Security.xml:3116
#, no-c-format
msgid "This rule allows users with the <literal>admin</literal> role to perform <emphasis>any</emphasis> action for any <literal>customer</literal> permission check."
msgstr "Questa regola consente agli utenti con il ruolo <literal>admin</literal> di eseguire <emphasis>qualsiasi</emphasis> azione per qualsiasi controllo di permesso su <literal>customer</literal>."

#. Tag: title
#: Security.xml:3126
#, no-c-format
msgid "PersistentPermissionResolver"
msgstr "PersistentPermissionResolver"

#. Tag: para
#: Security.xml:3128
#, no-c-format
msgid "Another built-in permission resolver provided by Seam, <literal>PersistentPermissionResolver</literal> allows permissions to be loaded from persistent storage, such as a relational database. This permission resolver provides ACL style instance-based security, allowing for specific object permissions to be assigned to individual users and roles. It also allows for persistent, arbitrarily-named permission targets (not necessarily object/class based) to be assigned in the same way."
msgstr "Un altro risolutore di permessi incluso in Seam, il <literal>PersistentPermissionResolver</literal> consente di caricare i permessi da un dispositivo di memorizzazione persistente, come un database relazionale. Questo risolutore di permessi fornisce una sicurezza orientata alle istanze in stile ACL (Access Control List), permettendo di assegnare specifici permessi sull'oggetto a utenti e ruoli. Allo stesso modo permette inoltre di assegnare in modo persistente permessi con un nome arbitrario (non necessariamente basato sull'oggetto o la classe). "

#. Tag: para
#: Security.xml:3139
#, no-c-format
msgid "Before it can be used, <literal>PersistentPermissionResolver</literal> must be configured with a valid <literal>PermissionStore</literal> in <literal>components.xml</literal>. If not configured, it will attempt to use the default permission store, <literal>JpaIdentityStore</literal> (see section further down for details). To use a permission store other than the default, configure the <literal>permission-store</literal> property as follows:"
msgstr "Prima di essere usato il <literal>PersistentPermissionResolver</literal> deve essere configurato con un <literal>PermissionStore</literal> valido in <literal>components.xml</literal>. Se non è configurato, proverà ad usare il permission store di default, <literal>JpaIdentityStore</literal> (vedi il paragrafo successivo per i dettagli). Per usare un permission store diverso da quello di default, occorre configurare la proprietà <literal>permission-store</literal> in questo modo:"

#. Tag: programlisting
#: Security.xml:3147
#, no-c-format
msgid "<![CDATA[  <security:persistent-permission-resolver permission-store=\"#{myCustomPermissionStore}\"/>]]>"
msgstr "<![CDATA[  <security:persistent-permission-resolver permission-store=\"#{myCustomPermissionStore}\"/>]]>"

#. Tag: title
#: Security.xml:3152
#, no-c-format
msgid "Permission Stores"
msgstr "I Permission Store"

#. Tag: para
#: Security.xml:3154
#, no-c-format
msgid "A permission store is required for <literal>PersistentPermissionResolver</literal> to connect to the backend storage where permissions are persisted. Seam provides one <literal>PermissionStore</literal> implementation out of the box, <literal>JpaPermissionStore</literal>, which is used to store permissions inside a relational database. It is possible to write your own permission store by implementing the <literal>PermissionStore</literal> interface, which defines the following methods:"
msgstr "Il <literal>PersistentPermissionManager</literal> richiede un permission store per connettersi al dispositivo di memorizzazione dove sono registrati i permessi. Seam fornisce una implementazione di <literal>PermissionStore</literal> già fatta, <literal>JpaPermissionStore</literal>, che viene usata per memorizzare i permessi in un database relazionale. E' possibile scrivere il proprio permission store implementando l'interfaccia <literal>PermissionStore</literal>, che definisce i seguenti metodi:"

#. Tag: title
#: Security.xml:3164
#, no-c-format
msgid "PermissionStore interface"
msgstr "Interfaccia PermissionStore"

#. Tag: literal
#: Security.xml:3190
#: Security.xml:3209
#: Security.xml:3228
#: Security.xml:3811
#: Security.xml:3830
#, no-c-format
msgid "List&lt;Permission&gt;"
msgstr "List&lt;Permission&gt;"

#. Tag: literal
#: Security.xml:3195
#: Security.xml:3835
#, no-c-format
msgid "listPermissions(Object target)"
msgstr "listPermissions(Object target)"

#. Tag: para
#: Security.xml:3199
#, no-c-format
msgid "This method should return a <literal>List</literal> of <literal>Permission</literal> objects representing all the permissions granted for the specified target object."
msgstr "Questo metodo deve restituire una <literal>List</literal> di oggetti <literal>Permission</literal> che rappresenti tutti i permessi concessi per l'oggetto indicato come obiettivo."

#. Tag: literal
#: Security.xml:3214
#: Security.xml:3816
#, no-c-format
msgid "listPermissions(Object target, String action)"
msgstr "listPermissions(Object target, String action)"

#. Tag: para
#: Security.xml:3218
#, no-c-format
msgid "This method should return a <literal>List</literal> of <literal>Permission</literal> objects representing all the permissions with the specified action, granted for the specified target object."
msgstr "Questo metodo deve restituire una <literal>List</literal> di oggetti <literal>Permission</literal> che rappresenti tutti i permessi sull'azione specificata, concessi per l'oggetto indicato come obiettivo."

#. Tag: literal
#: Security.xml:3233
#, no-c-format
msgid "listPermissions(Set&lt;Object&gt; targets, String action)"
msgstr "listPermissions(Set&lt;Object&gt; targets, String action)"

#. Tag: para
#: Security.xml:3237
#, no-c-format
msgid "This method should return a <literal>List</literal> of <literal>Permission</literal> objects representing all the permissions with the specified action, granted for the specified set of target objects."
msgstr "Questo metodo deve restituire una <literal>List</literal> di oggetti <literal>Permission</literal> che rappresenti tutti i permessi sull'azione specificata concessi per l'insieme di oggetti indicati come obiettivi."

#. Tag: literal
#: Security.xml:3253
#, no-c-format
msgid "grantPermission(Permission)"
msgstr "grantPermission(Permission)"

#. Tag: para
#: Security.xml:3257
#, no-c-format
msgid "This method should persist the specified <literal>Permission</literal> object to the backend storage, returning true if successful."
msgstr "Questo metodo deve rendere persistente l'oggetto <literal>Permission</literal> specificato nel dispositivo di memorizzazione, restituendo vero se l'operazione si conclude senza errori."

#. Tag: literal
#: Security.xml:3272
#: Security.xml:3873
#, no-c-format
msgid "grantPermissions(List&lt;Permission&gt; permissions)"
msgstr "grantPermissions(List&lt;Permission&gt; permissions)"

#. Tag: para
#: Security.xml:3276
#, no-c-format
msgid "This method should persist all of the <literal>Permission</literal> objects contained in the specified <literal>List</literal>, returning true if successful."
msgstr "Questo metodo deve rendere persisistenti tutti gli oggetti <literal>Permission</literal> contenuti nella <literal>List</literal> specificata, restituendo vero se l'operazione si conclude senza errori."

#. Tag: literal
#: Security.xml:3291
#: Security.xml:3892
#, no-c-format
msgid "revokePermission(Permission permission)"
msgstr "revokePermission(Permission permission)"

#. Tag: para
#: Security.xml:3295
#, no-c-format
msgid "This method should remove the specified <literal>Permission</literal> object from persistent storage."
msgstr "Questo metodo deve rimuove l'oggetto <literal>Permission</literal> specificato dal dispositivo di memorizzazione."

#. Tag: literal
#: Security.xml:3309
#: Security.xml:3911
#, no-c-format
msgid "revokePermissions(List&lt;Permission&gt; permissions)"
msgstr "revokePermissions(List&lt;Permission&gt; permissions)"

#. Tag: para
#: Security.xml:3313
#, no-c-format
msgid "This method should remove all of the <literal>Permission</literal> objects in the specified list from persistent storage."
msgstr "Questo metodo deve rimuovere dal dispositivo di memorizzazione tutti gli oggetti <literal>Permission</literal> specificati nella lista."

#. Tag: literal
#: Security.xml:3323
#: Security.xml:3925
#, no-c-format
msgid "List&lt;String&gt;"
msgstr "List&lt;String&gt;"

#. Tag: literal
#: Security.xml:3328
#: Security.xml:3930
#, no-c-format
msgid "listAvailableActions(Object target)"
msgstr "listAvailableActions(Object target)"

#. Tag: para
#: Security.xml:3332
#, no-c-format
msgid "This method should return a list of all the available actions (as Strings) for the class of the specified target object. It is used in conjunction with permission management to build the user interface for granting specific class permissions (see section further down)."
msgstr "Questo metodo deve restituire una lista di tutte le azioni disponibili (sotto forma di String) per la classe dell'oggetto specificato. Viene usato dalla gestione dei permessi per costruire l'interfaccia utente con cui si concedono i permessi sulle varie classi (vedi il paragrafo più avanti)."

#. Tag: title
#: Security.xml:3346
#, no-c-format
msgid "JpaPermissionStore"
msgstr "JpaPermissionStore"

#. Tag: para
#: Security.xml:3348
#, no-c-format
msgid "This is the default <literal>PermissionStore</literal> implementation (and the only one provided by Seam), which uses a relational database to store permissions. Before it can be used it must be configured with either one or two entity classes for storing user and role permissions. These entity classes must be annotated with a special set of security annotations to configure which properties of the entity correspond to various aspects of the permissions being stored."
msgstr "E' l'implementazione di default di <literal>PermissionStore</literal> (e l'unica fornita da Seam), che usa un database relazionale per memorizzare i permessi. Prima di poter essere usata deve essere configurata con una o due classi per la memorizzazione dei permessi su utenti e ruoli. Queste classi entità devono essere annotate con uno speciale insieme di annotazioni relative alla sicurezza per configurare quali proprietà dell'entità corrispondono alle diverse caratteristiche dei permessi che devono essere memorizzati."

#. Tag: para
#: Security.xml:3356
#, no-c-format
msgid "If you wish to use the same entity (i.e. a single database table) to store both user and role permissions, then only the <literal>user-permission-class</literal> property is required to be configured. If you wish to use separate tables for storing user and role permissions, then in addition to the <literal>user-permission-class</literal> property you must also configure the <literal>role-permission-class</literal> property."
msgstr "Se si vuole usare la stessa entità (cioè una sola tabella sul database) per memorizzare sia i permessi degli utenti che quelli dei ruoli, allora è necessario configurare solo la proprietà <literal>user-permission-class</literal>. Se si vogliono usare due tabelle distinte per memorizzare i permessi degli utenti e quelli dei ruoli, allora in aggiunta alla proprietà <literal>user-permission-class</literal> si dovrà configurare anche la proprietà <literal>role-permission-class</literal>."

#. Tag: para
#: Security.xml:3363
#, no-c-format
msgid "For example, to configure a single entity class to store both user and role permissions:"
msgstr "Ad esempio, per configurare una sola classe entità per memorizzare sia i permessi degli utenti che quelli dei ruoli:"

#. Tag: programlisting
#: Security.xml:3365
#, no-c-format
msgid "<![CDATA[  <security:jpa-permission-store user-permission-class=\"com.acme.model.AccountPermission\"/>]]>"
msgstr "<![CDATA[  <security:jpa-permission-store user-permission-class=\"com.acme.model.AccountPermission\"/>]]>"

#. Tag: para
#: Security.xml:3367
#, no-c-format
msgid "To configure separate entity classes for storing user and role permissions:"
msgstr "Per configurare classi entità separate per la memorizzazione dei permessi di utenti e ruoli:"

#. Tag: programlisting
#: Security.xml:3369
#, no-c-format
msgid ""
"<![CDATA[  <security:jpa-permission-store user-permission-class=\"com.acme.model.UserPermission\"\n"
"    role-permission-class=\"com.acme.model.RolePermission\"/>]]>"
msgstr ""
"<![CDATA[  <security:jpa-permission-store user-permission-class=\"com.acme.model.UserPermission\"\n"
"    role-permission-class=\"com.acme.model.RolePermission\"/>]]>"

#. Tag: title
#: Security.xml:3372
#, no-c-format
msgid "Permission annotations"
msgstr "Annotazioni relative ai permessi"

#. Tag: para
#: Security.xml:3374
#, no-c-format
msgid "As mentioned, the entity classes that contain the user and role permissions must be configured with a special set of annotations, contained within the <literal>org.jboss.seam.annotations.security.permission</literal> package. The following table lists each of these annotations along with a description of how they are used:"
msgstr "Come già detto, le classi entità che contengono i permessi degli utenti e dei ruoli devono essere configurate con uno speciale insieme di annotazioni contenute nel pacchetto <literal>org.jboss.seam.annotations.security.permission</literal>. La seguente tabella elenca queste annotazioni insieme ad una descrizione su come sono usate:"

#. Tag: title
#: Security.xml:3381
#, no-c-format
msgid "Entity Permission annotations"
msgstr "Annotazioni per le entità dei permessi"

#. Tag: para
#: Security.xml:3394
#: Security.xml:3557
#, no-c-format
msgid "Target"
msgstr "Obiettivo"

#. Tag: literal
#: Security.xml:3407
#, no-c-format
msgid "@PermissionTarget"
msgstr "@PermissionTarget"

#. Tag: literal
#: Security.xml:3412
#: Security.xml:3431
#: Security.xml:3450
#: Security.xml:3469
#: Security.xml:3488
#, no-c-format
msgid "FIELD,METHOD"
msgstr "FIELD,METHOD"

#. Tag: para
#: Security.xml:3416
#, no-c-format
msgid "This annotation identifies the property of the entity that will contain the permission target. The property should be of type <literal>java.lang.String</literal>."
msgstr "Questa annotazione identifica la proprietà dell'entità che contiene l'obiettivo del permesso. La proprietà deve essere di tipo <literal>java.lang.Sting</literal>."

#. Tag: literal
#: Security.xml:3426
#, no-c-format
msgid "@PermissionAction"
msgstr "@PermissionAction"

#. Tag: para
#: Security.xml:3435
#, no-c-format
msgid "This annotation identifies the property of the entity that will contain the permission action. The property should be of type <literal>java.lang.String</literal>."
msgstr "Questa annotazione identifica la proprietà dell'entità che contiene l'azione. La proprietà deve essere di tipo <literal>java.lang.String</literal>."

#. Tag: literal
#: Security.xml:3445
#, no-c-format
msgid "@PermissionUser"
msgstr "@PermissionUser"

#. Tag: para
#: Security.xml:3454
#, no-c-format
msgid "This annotation identifies the property of the entity that will contain the recipient user for the permission. It should be of type <literal>java.lang.String</literal> and contain the user's username."
msgstr "Questa annotazione identifica la proprietà dell'entità che contiene l'utente a cui viene concesso il permesso. Deve essere di tipo <literal>java.lang.String</literal> e contenere la username dell'utente."

#. Tag: literal
#: Security.xml:3464
#, no-c-format
msgid "@PermissionRole"
msgstr "@PermissionRole"

#. Tag: para
#: Security.xml:3473
#, no-c-format
msgid "This annotation identifies the property of the entity that will contain the recipient role for the permission. It should be of type <literal>java.lang.String</literal> and contain the role name."
msgstr "Questa annotazione identifica la proprietà dell'entità che contiene il ruolo a cui viene concesso il premesso. Deve essere di tipo <literal>java.lang.String</literal> e contenere i nome del ruolo."

#. Tag: literal
#: Security.xml:3483
#, no-c-format
msgid "@PermissionDiscriminator"
msgstr "@PermissionDiscriminator"

#. Tag: para
#: Security.xml:3492
#, no-c-format
msgid "This annotation should be used when the same entity/table is used to store both user and role permissions. It identifies the property of the entity that is used to discriminate between user and role permissions. By default, if the column value contains the string literal <literal>user</literal>, then the record will be treated as a user permission. If it contains the string literal <literal>role</literal>, then it will be treated as a role permission. It is also possible to override these defaults by specifying the <literal>userValue</literal> and <literal>roleValue</literal> properties within the annotation. For example, to use <literal>u</literal> and <literal>r</literal> instead of <literal>user</literal> and <literal>role</literal>, the annotation would be written like this:"
msgstr "Questa annotazione deve essere usata quando la stessa entità/tabella viene usata per memorizzare sia i permessi degli utenti che quelli dei ruoli. Essa identifica la proprietà dell'entità che è usata per discriminare tra i permessi degli utenti e quelli dei ruoli. Per default, se il valore della colonna contiene la stringa <literal>user</literal>, allora il record sarà trattato come un permesso utente. Se contiene la stringa <literal>role</literal>, allora sarà trattato come un permesso del ruolo. E' anche possibile sovrascrivere questi valori specificando le proprietà <literal>userValue</literal> e <literal>roleValue</literal> all'interno delle annotazioni. Ad esempio, per usare <literal>u</literal> e <literal>r</literal> invece di <literal>user</literal> e <literal>role</literal>, le annotazioni dovranno essere scritte in questo modo:"

#. Tag: programlisting
#: Security.xml:3502
#, no-c-format
msgid "<![CDATA[  @PermissionDiscriminator(userValue = \"u\", roleValue = \"r\")]]>"
msgstr "<![CDATA[  @PermissionDiscriminator(userValue = \"u\", roleValue = \"r\")]]>"

#. Tag: title
#: Security.xml:3513
#, no-c-format
msgid "Example Entity"
msgstr "Esempio di entità"

#. Tag: para
#: Security.xml:3515
#, no-c-format
msgid "Here is an example of an entity class that is used to store both user and role permissions. The following class can be found inside the SeamSpace example:"
msgstr "Ecco un esempio di una classe entità che viene usata per memorizzare sia i permessi degli utenti che quelli dei ruoli. La seguente classe si trova nell'applicazione di esempio SeamSpace:"

#. Tag: programlisting
#: Security.xml:3520
#, no-c-format
msgid ""
"<![CDATA[\n"
"@Entity\n"
"public class AccountPermission implements Serializable {  \n"
"   private Integer permissionId;\n"
"   private String recipient;\n"
"   private String target;\n"
"   private String action;\n"
"   private String discriminator;\n"
"   \n"
"   @Id @GeneratedValue\n"
"   public Integer getPermissionId() {\n"
"      return permissionId;\n"
"   }\n"
"   \n"
"   public void setPermissionId(Integer permissionId) {\n"
"      this.permissionId = permissionId;\n"
"   }\n"
"   \n"
"   @PermissionUser @PermissionRole\n"
"   public String getRecipient() {\n"
"      return recipient;\n"
"   }\n"
"   \n"
"   public void setRecipient(String recipient) {\n"
"      this.recipient = recipient;\n"
"   }\n"
"   \n"
"   @PermissionTarget\n"
"   public String getTarget() {\n"
"      return target;\n"
"   }\n"
"   \n"
"   public void setTarget(String target) {\n"
"      this.target = target;\n"
"   }\n"
"   \n"
"   @PermissionAction\n"
"   public String getAction() {\n"
"      return action;\n"
"   }\n"
"   \n"
"   public void setAction(String action) {\n"
"      this.action = action;\n"
"   }\n"
"   \n"
"   @PermissionDiscriminator\n"
"   public String getDiscriminator() {\n"
"      return discriminator;\n"
"   }\n"
"   \n"
"   public void setDiscriminator(String discriminator) {\n"
"      this.discriminator = discriminator;\n"
"   }\n"
"}          \n"
"          ]]>"
msgstr ""
"<![CDATA[\n"
"@Entity\n"
"public class AccountPermission implements Serializable {  \n"
"   private Integer permissionId;\n"
"   private String recipient;\n"
"   private String target;\n"
"   private String action;\n"
"   private String discriminator;\n"
"   \n"
"   @Id @GeneratedValue\n"
"   public Integer getPermissionId() {\n"
"      return permissionId;\n"
"   }\n"
"   \n"
"   public void setPermissionId(Integer permissionId) {\n"
"      this.permissionId = permissionId;\n"
"   }\n"
"   \n"
"   @PermissionUser @PermissionRole\n"
"   public String getRecipient() {\n"
"      return recipient;\n"
"   }\n"
"   \n"
"   public void setRecipient(String recipient) {\n"
"      this.recipient = recipient;\n"
"   }\n"
"   \n"
"   @PermissionTarget\n"
"   public String getTarget() {\n"
"      return target;\n"
"   }\n"
"   \n"
"   public void setTarget(String target) {\n"
"      this.target = target;\n"
"   }\n"
"   \n"
"   @PermissionAction\n"
"   public String getAction() {\n"
"      return action;\n"
"   }\n"
"   \n"
"   public void setAction(String action) {\n"
"      this.action = action;\n"
"   }\n"
"   \n"
"   @PermissionDiscriminator\n"
"   public String getDiscriminator() {\n"
"      return discriminator;\n"
"   }\n"
"   \n"
"   public void setDiscriminator(String discriminator) {\n"
"      this.discriminator = discriminator;\n"
"   }\n"
"}          \n"
"          ]]>"

#. Tag: para
#: Security.xml:3522
#, no-c-format
msgid "As can be seen in the above example, the <literal>getDiscriminator()</literal> method has been annotated with the <literal>@PermissionDiscriminator</literal> annotation, to allow <literal>JpaPermissionStore</literal> to determine which records represent user permissions and which represent role permissions. In addition, it can also be seen that the <literal>getRecipient()</literal> method is annotated with both <literal>@PermissionUser</literal> and <literal>@PermissionRole</literal> annotations. This is perfectly valid, and simply means that the <literal>recipient</literal> property of the entity will either contain the name of the user or the name of the role, depending on the value of the <literal>discriminator</literal> property."
msgstr "Come si vede dall'esempio precedente, il metodo <literal>getDiscriminator()</literal> è stato annotato con l'annotazione <literal>@PermissionDiscriminator</literal> per consentire a <literal>JpaPermissionStore</literal> di determinare quali record rappresentano i permessi degli utenti e quali rappresentano i permessi dei ruoli. Inoltre si può vedere che il metodo <literal>getRecipient()</literal> è annotato sia con l'annotazione <literal>@PermissionUser</literal> che con <literal>@PermissionRole</literal>. Ciò è perfettamente valido e significa semplicemente che la proprietà <literal>recipient</literal> dell'entità conterrà sia il nome dell'utente che quello del ruolo, in funzione del valore della proprietà <literal>discriminator</literal>."

#. Tag: title
#: Security.xml:3535
#, no-c-format
msgid "Class-specific Permission Configuration"
msgstr "Configurazioni dei permessi specifiche per le classi"

#. Tag: para
#: Security.xml:3537
#, no-c-format
msgid "A further set of class-specific annotations can be used to configure a specific set of allowable permissions for a target class. These permissions can be found in the <literal>org.jboss.seam.annotation.security.permission</literal> package:"
msgstr "Un ulteriore insieme di annotazioni specifiche per le classi può essere usato per specificare i permessi consentiti per una determinata classe obiettivo. Questi permessi si possono trovare nel pacchetto <literal>org.jboss.seam.annotation.security.permission</literal>:"

#. Tag: title
#: Security.xml:3544
#, no-c-format
msgid "Class Permission Annotations"
msgstr "Annotazioni per i permessi sulle classi"

#. Tag: literal
#: Security.xml:3570
#, no-c-format
msgid "@Permissions"
msgstr "@Permissions"

#. Tag: literal
#: Security.xml:3575
#: Security.xml:3593
#, no-c-format
msgid "TYPE"
msgstr "TYPE"

#. Tag: para
#: Security.xml:3579
#, no-c-format
msgid "A container annotation, this annotation may contain an array of <literal>@Permission</literal> annotations."
msgstr "E' una annotazione contenitore, che può contenere un elenco di annotazioni <literal>@Permission</literal>."

#. Tag: literal
#: Security.xml:3588
#, no-c-format
msgid "@Permission"
msgstr "@Permission"

#. Tag: para
#: Security.xml:3597
#, no-c-format
msgid "This annotation defines a single allowable permission action for the target class. Its <literal>action</literal> property must be specified, and an optional <literal>mask</literal> property may also be specified if permission actions are to be persisted as bitmasked values (see next section)."
msgstr "Questa annotazione definisce una singola azione regolata da un permesso per la classe obiettivo. La sua proprietà <literal>action</literal> deve essere specificata e una proprietà opzionale <literal>mask</literal> può essere specificata se le azioni regolate da un permesso devono essere memorizzate come valori di una maschera di bit (vedi il paragrafo seguente)."

#. Tag: para
#: Security.xml:3609
#, no-c-format
msgid "Here's an example of the above annotations in action. The following class can also be found in the SeamSpace example:"
msgstr "Ecco un esempio di queste annotazioni al lavoro. La seguente classe si trova anch'essa nell'applicazione di esempio SeamSpace:"

#. Tag: programlisting
#: Security.xml:3613
#, no-c-format
msgid ""
"<![CDATA[@Permissions({\n"
"   @Permission(action = \"view\"),\n"
"   @Permission(action = \"comment\")\n"
"})\n"
"@Entity\n"
"public class MemberImage implements Serializable {]]>"
msgstr ""
"<![CDATA[@Permissions({\n"
"   @Permission(action = \"view\"),\n"
"   @Permission(action = \"comment\")\n"
"})\n"
"@Entity\n"
"public class MemberImage implements Serializable {]]>"

#. Tag: para
#: Security.xml:3615
#, no-c-format
msgid "This example demonstrates how two allowable permission actions, <literal>view</literal> and <literal>comment</literal> can be declared for the entity class <literal>MemberImage</literal>."
msgstr "Questo esempio dimostra come due possibili azioni regolate da permesso, <literal>view</literal> e <literal>comment</literal> possono essere dichiarate per la classe entità <literal>MemberImage</literal>."

#. Tag: title
#: Security.xml:3623
#, no-c-format
msgid "Permission masks"
msgstr "Maschere di bit per i permessi"

#. Tag: para
#: Security.xml:3625
#, no-c-format
msgid "By default, multiple permissions for the same target object and recipient will be persisted as a single database record, with the <literal>action</literal> property/column containing a comma-separated list of the granted actions. To reduce the amount of physical storage required to persist a large number of permissions, it is possible to use a bitmasked integer value (instead of a comma-separated list) to store the list of permission actions."
msgstr "Per default più permessi per lo stesso obiettivo e destinatario vengono memorizzati in un singolo record sul database, con la proprietà/colonna <literal>action</literal> contenente un elenco delle azioni concesse separate da una virgola. Per ridurre la quantità di spazio fisico richiesto per memorizzare un numero elevato di permessi è possibile usare un valore intero come maschera di bit (al posto di un elenco di valori separati da virgole) per memorizzare l'elenco delle azioni consentite."

#. Tag: para
#: Security.xml:3632
#, no-c-format
msgid "For example, if recipient \"Bob\" is granted both the <literal>view</literal> and <literal>comment</literal> permissions for a particular <literal>MemberImage</literal> (an entity bean) instance, then by default the <literal>action</literal> property of the permission entity will contain \"<literal>view,comment</literal>\", representing the two granted permission actions. Alternatively, if using bitmasked values for the permission actions, as defined like so:"
msgstr "Ad esempio, se al destinatario \"Pippo\" è concesso sia il permesso <literal>view</literal> che il permesso <literal>comment</literal> per una particolare istanza di <literal>MemberImage</literal> (un entity bean), allora per default la proprietà dell'entità permesso conterrà \"<literal>view,comment</literal>\", che rappresenta la concessione di due azioni. In alternativa, usando i valori di una maschera di bit per le azioni, si può definire in questo modo:"

#. Tag: programlisting
#: Security.xml:3639
#, no-c-format
msgid ""
"<![CDATA[@Permissions({\n"
"   @Permission(action = \"view\", mask = 1),\n"
"   @Permission(action = \"comment\", mask = 2)\n"
"})\n"
"@Entity\n"
"public class MemberImage implements Serializable {]]>"
msgstr ""
"<![CDATA[@Permissions({\n"
"   @Permission(action = \"view\", mask = 1),\n"
"   @Permission(action = \"comment\", mask = 2)\n"
"})\n"
"@Entity\n"
"public class MemberImage implements Serializable {]]>"

#. Tag: para
#: Security.xml:3641
#, no-c-format
msgid "The <literal>action</literal> property will instead simply contain \"3\" (with both the 1 bit and 2 bit switched on). Obviously for a large number of allowable actions for any particular target class, the storage required for the permission records is greatly reduced by using bitmasked actions."
msgstr "La proprietà <literal>action</literal> conterrà semplicemente \"3\" (con sia il bit 1 che il bit 2 alzati). Ovviamente per un numero elevato di azioni da consentire per una particolare classe obiettivo, lo spazio richiesto per memorizzare i record dei permessi si riduce grandemente usando le azioni con la maschera di bit."

#. Tag: para
#: Security.xml:3647
#, no-c-format
msgid "Obviously, it is very important that the <literal>mask</literal> values specified are powers of 2."
msgstr "E' molto importante che i valori assegnati a <literal>mask</literal> siano specificati come potenze di 2."

#. Tag: title
#: Security.xml:3653
#, no-c-format
msgid "Identifier Policy"
msgstr "Risoluzione dell'identificatore"

#. Tag: para
#: Security.xml:3655
#, no-c-format
msgid "When storing or looking up permissions, <literal>JpaPermissionStore</literal> must be able to uniquely identify specific object instances to effectively operate on its permissions. To achieve this, an <emphasis>identifier strategy</emphasis> may be assigned to each target class for the generation of unique identifier values. Each identifier strategy implementation knows how to generate unique identifiers for a particular type of class, and it is a simple matter to create new identifier strategies."
msgstr "Quando <literal>JpaPermissionStore</literal> memorizza o cerca un permesso deve essere in grado di identificare univocamente le istanze degli oggetti sui cui permessi deve operare. Per ottenere questo occorre assegnare una <emphasis>strategia di risoluzione dell'identificatore</emphasis> per ciascuna classe obiettivo, in modo da generare i valori identificativi univoci. Ciascuna implementazione della strategia di risoluzione sa come generare gli identificativi univoci per un particolare tipo di classe ed è solo questione di creare nuove strategie di risoluzione."

#. Tag: para
#: Security.xml:3663
#, no-c-format
msgid "The <literal>IdentifierStrategy</literal> interface is very simple, declaring only two methods:"
msgstr "L'interfaccia <literal>IdentifierStrategy</literal> è molto semplice e dichiara solo due metodi:"

#. Tag: programlisting
#: Security.xml:3667
#, no-c-format
msgid ""
"<![CDATA[public interface IdentifierStrategy {\n"
"   boolean canIdentify(Class targetClass);\n"
"   String getIdentifier(Object target);\n"
"}]]>"
msgstr ""
"<![CDATA[public interface IdentifierStrategy {\n"
"   boolean canIdentify(Class targetClass);\n"
"   String getIdentifier(Object target);\n"
"}]]>"

#. Tag: para
#: Security.xml:3669
#, no-c-format
msgid "The first method, <literal>canIdentify()</literal> simply returns <literal>true</literal> if the identifier strategy is capable of generating a unique identifier for the specified target class. The second method, <literal>getIdentifier()</literal> returns the unique identifier value for the specified target object."
msgstr "Il primo metodo, <literal>canIdentify()</literal> restituisce semplicemente <literal>true</literal> se la strategia di risoluzione è in grado di generare un identificativo univoco per la classe obiettivo specificata. Il secondo metodo, <literal>getIdentifier()</literal> restituisce il valore dell'identificativo univoco per l'oggetto obiettivo specificato."

#. Tag: para
#: Security.xml:3675
#, no-c-format
msgid "Seam provides two <literal>IdentifierStrategy</literal> implementations, <literal>ClassIdentifierStrategy</literal> and <literal>EntityIdentifierStrategy</literal> (see next sections for details)."
msgstr "Seam fornisce due implementazioni di <literal>IdentifierStrategy</literal>, <literal>ClassIdentifierStrategy</literal> e <literal>EntityIdentifierStrategy</literal> (vedi i prossimi paragrafi per i dettagli)."

#. Tag: para
#: Security.xml:3680
#, no-c-format
msgid "To explicitly configure a specific identifier strategy to use for a particular class, it should be annotated with <literal>org.jboss.seam.annotations.security.permission.Identifier</literal>, and the value should be set to a concrete implementation of the <literal>IdentifierStrategy</literal> interface. An optional <literal>name</literal> property can also be specified, the effect of which is dependent upon the actual <literal>IdentifierStrategy</literal> implementation used."
msgstr "Per configurare esplicitamente la strategia di risoluzione da usare per una particolare classe, essa deve essere annotata con <literal>org.jboss.seam.annotations.security.permission.Identifier</literal>, e il valore deve essere impostato a una implementazione dell'interfaccia <literal>IdentifierStrategy</literal>. Una proprietà facoltativa <literal>name</literal> può essere specificata, e il suo effetto dipende dall'implementazione di <literal>IdentifierStrategy</literal> usata."

#. Tag: title
#: Security.xml:3690
#, no-c-format
msgid "ClassIdentifierStrategy"
msgstr "ClassIdentifierStrategy"

#. Tag: para
#: Security.xml:3692
#, no-c-format
msgid "This identifier strategy is used to generate unique identifiers for classes, and will use the value of the <literal>name</literal> (if specified) in the <literal>@Identifier</literal> annotation. If there is no <literal>name</literal> property provided, then it will attempt to use the component name of the class (if the class is a Seam component), or as a last resort it will create an identifier based on the name of the class (excluding the package name). For example, the identifier for the following class will be \"<literal>customer</literal>\":"
msgstr "Questa strategia di risoluzione degli identificatori è usata per generare gli identificatori univoci per le classi e userà il valore della proprietà <literal>name</literal> (se indicato) nell'annotazione <literal>@Identifier</literal>. Se la proprietà <literal>name</literal> non è indicata, allora tenterà di usare il nome del componente della classe (se la classe è un componente Seam), oppure, come ultima risorsa creerà un identificatore basato sul nome della classe (escludendo il nome del pacchetto). Ad esempio, l'identificatore per la seguente classe sarà \"<literal>customer</literal>\":"

#. Tag: programlisting
#: Security.xml:3701
#, no-c-format
msgid ""
"<![CDATA[@Identifier(name = \"customer\")\n"
"public class Customer {]]>"
msgstr ""
"<![CDATA[@Identifier(name = \"customer\")\n"
"public class Customer {]]>"

#. Tag: para
#: Security.xml:3703
#, no-c-format
msgid "The identifier for the following class will be \"<literal>customerAction</literal>\":"
msgstr "L'identificatore per la seguente classe sarà \"<literal>customerAction</literal>\":"

#. Tag: programlisting
#: Security.xml:3707
#, no-c-format
msgid ""
"<![CDATA[@Name(\"customerAction\")\n"
"public class CustomerAction { ]]>"
msgstr ""
"<![CDATA[@Name(\"customerAction\")\n"
"public class CustomerAction { ]]>"

#. Tag: para
#: Security.xml:3709
#, no-c-format
msgid "Finally, the identifier for the following class will be \"<literal>Customer</literal>\":"
msgstr "Infine, l'identificatore per la seguente classe sarà \"<literal>Customer</literal>\":"

#. Tag: programlisting
#: Security.xml:3713
#, no-c-format
msgid "<![CDATA[public class Customer { ]]>"
msgstr "<![CDATA[public class Customer { ]]>"

#. Tag: title
#: Security.xml:3718
#, no-c-format
msgid "EntityIdentifierStrategy"
msgstr "EntityIdentifierStrategy"

#. Tag: para
#: Security.xml:3720
#, no-c-format
msgid "This identifier strategy is used to generate unique identifiers for entity beans. It does so by concatenating the entity name (or otherwise configured name) with a string representation of the primary key value of the entity. The rules for generating the name section of the identifier are similar to <literal>ClassIdentifierStrategy</literal>. The primary key value (i.e. the <emphasis>id</emphasis> of the entity) is obtained using the <literal>PersistenceProvider</literal> component, which is able to correctly determine the value regardless of which persistence implementation is used within the Seam application. For entities not annotated with <literal>@Entity</literal>, it is necessary to explicitly configure the identifier strategy on the entity class itself, for example:"
msgstr "Questa strategia di risoluzione è usata per generare valori di identificatori univoci per gli entity bean. Quello che fa è concatenare il nome dell'entità (o un nome configurato in altro modo) con una stringa che rappresenta la chiave primaria dell'entità. Le regole per generare la parte nome dell'identificatore sono simili a <literal>ClassIdentifierStrategy</literal>. La chiave primaria (cioè l'<emphasis>id</emphasis> dell'entità) viene ottenuto usando il componente <literal>PersistenceProvider</literal>, che è in grado di determinarne il valore a prescindere dall'implementazione della persistenza utilizzata dall'applicazione Seam. Per le entità non annotate con <literal>@Entity</literal> è necessario configurare esplicitamente la strategia di risoluzione dell'identificatore nella classe entità stessa, ad esempio:"

#. Tag: programlisting
#: Security.xml:3731
#, no-c-format
msgid ""
"<![CDATA[@Identifier(value = EntityIdentifierStrategy.class)\n"
"public class Customer { ]]>"
msgstr ""
"<![CDATA[@Identifier(value = EntityIdentifierStrategy.class)\n"
"public class Customer { ]]>"

#. Tag: para
#: Security.xml:3733
#, no-c-format
msgid "For an example of the type of identifier values generated, assume we have the following entity class:"
msgstr "Per avere un esempio del tipo di valori di identificatore generati, supponiamo di avere la seguente classe entità:"

#. Tag: programlisting
#: Security.xml:3737
#, no-c-format
msgid ""
"<![CDATA[@Entity\n"
"public class Customer {\n"
"  private Integer id;\n"
"  private String firstName;\n"
"  private String lastName;\n"
"  \n"
"  @Id \n"
"  public Integer getId() { return id; }\n"
"  public void setId(Integer id) { this.id = id; }\n"
"  \n"
"  public String getFirstName() { return firstName; }\n"
"  public void setFirstName(String firstName) { this.firstName = firstName; }\n"
"  \n"
"  public String getLastName() { return lastName; }\n"
"  public void setLastName(String lastName) { this.lastName = lastName; }\n"
"}]]>"
msgstr ""
"<![CDATA[@Entity\n"
"public class Customer {\n"
"  private Integer id;\n"
"  private String firstName;\n"
"  private String lastName;\n"
"  \n"
"  @Id \n"
"  public Integer getId() { return id; }\n"
"  public void setId(Integer id) { this.id = id; }\n"
"  \n"
"  public String getFirstName() { return firstName; }\n"
"  public void setFirstName(String firstName) { this.firstName = firstName; }\n"
"  \n"
"  public String getLastName() { return lastName; }\n"
"  public void setLastName(String lastName) { this.lastName = lastName; }\n"
"}]]>"

#. Tag: para
#: Security.xml:3739
#, no-c-format
msgid "For a <literal>Customer</literal> instance with an <literal>id</literal> value of <literal>1</literal>, the value of the identifier would be \"<literal>Customer:1</literal>\". If the entity class is annotated with an explicit identifier name, like so:"
msgstr "Per una istanza di <literal>Customer</literal> con un valore di <literal>id</literal> pari a <literal>1</literal>, il valore dell'identificatore sarà \"<literal>Customer:1</literal>\". Se l'entità è annotata con un nome esplicito di identificatore, come questo:"

#. Tag: programlisting
#: Security.xml:3745
#, no-c-format
msgid ""
"<![CDATA[@Entity\n"
"@Identifier(name = \"cust\")\n"
"public class Customer { ]]>"
msgstr ""
"<![CDATA[@Entity\n"
"@Identifier(name = \"cust\")\n"
"public class Customer { ]]>"

#. Tag: para
#: Security.xml:3747
#, no-c-format
msgid "Then a <literal>Customer</literal> with an <literal>id</literal> value of <literal>123</literal> would have an identifier value of \"<literal>cust:123</literal>\"."
msgstr "Allora un <literal>Customer</literal> con un <literal>id</literal> pari a <literal>123</literal> avrà come identificatore \"<literal>cust:123</literal>\"."

#. Tag: title
#: Security.xml:3760
#, no-c-format
msgid "Permission Management"
msgstr "Gestione dei permessi"

#. Tag: para
#: Security.xml:3762
#, no-c-format
msgid "In much the same way that Seam Security provides an Identity Management API for the management of users and roles, it also provides a Permissions Management API for the management of persistent user permissions, via the <literal>PermissionManager</literal> component."
msgstr "In modo del tutto simile a come la sicurezza di Seam fornisce una API per la gestione delle identità per gestire utenti e ruoli, essa fornisce anche una API per la gestione dei permessi, tramite il componente <literal>PermissionManager</literal>."

#. Tag: title
#: Security.xml:3769
#, no-c-format
msgid "PermissionManager"
msgstr "PermissionManager"

#. Tag: para
#: Security.xml:3771
#, no-c-format
msgid "The <literal>PermissionManager</literal> component is an application-scoped Seam component that provides a number of methods for managing permissions. Before it can be used, it must be configured with a permission store (although by default it will attempt to use <literal>JpaPermissionStore</literal> if it is available). To explicitly configure a custom permission store, specify the <literal>permission-store</literal> property in components.xml:"
msgstr "Il componente <literal>PermissionManager</literal> è un componente Seam registrato a livello application che fornisce una serie di metodi per gestire i permessi. Prima di poter essere usato deve essere configurato con un permission store (benché di default tenterà di usare il <literal>JpaPermissionStore</literal> se disponibile). Per configurare esplicitamente un permission store personalizzato, occorre specificare la proprietà <literal>permission-store</literal> in components.xml:"

#. Tag: programlisting
#: Security.xml:3778
#, no-c-format
msgid ""
"<![CDATA[\n"
"<security:permission-manager permission-store=\"#{ldapPermissionStore}\"/>      \n"
"      ]]>"
msgstr ""
"<![CDATA[\n"
"<security:permission-manager permission-store=\"#{ldapPermissionStore}\"/>      \n"
"      ]]>"

#. Tag: para
#: Security.xml:3780
#, no-c-format
msgid "The following table describes each of the available methods provided by <literal>PermissionManager</literal>:"
msgstr "La seguente tabella descrive ciascuno dei metodi disponibili forniti da <literal>PermissionManager</literal>:"

#. Tag: title
#: Security.xml:3785
#, no-c-format
msgid "PermissionManager API methods"
msgstr "Metodi della API PermissionManager"

#. Tag: para
#: Security.xml:3820
#: Security.xml:3839
#, no-c-format
msgid "Returns a list of <literal>Permission</literal> objects representing all of the permissions that have been granted for the specified target and action."
msgstr "Restituisce un elenco di oggetti <literal>Permession</literal> che rappresenta tutti i permessi che sono stati concessi all'obiettivo e all'azione specificata."

#. Tag: literal
#: Security.xml:3854
#, no-c-format
msgid "grantPermission(Permission permission)"
msgstr "grantPermission(Permission permission)"

#. Tag: para
#: Security.xml:3858
#, no-c-format
msgid "Persists (grants) the specified <literal>Permission</literal> to the backend permission store. Returns true if the operation was successful."
msgstr "Memorizza (concede) il <literal>Permission</literal> specificato nel permission store sottostante. Restituisce true se l'operazione si è conclusa con esito positivo."

#. Tag: para
#: Security.xml:3877
#, no-c-format
msgid "Persists (grants) the specified list of <literal>Permission</literal>s to the backend permission store. Returns true if the operation was successful."
msgstr "Memorizza (concede) l'elenco di <literal>Permission</literal> specificato nel permission store sottostante. Restiuisce true se l'operazione si è conclusa con esito positivo."

#. Tag: para
#: Security.xml:3896
#, no-c-format
msgid "Removes (revokes) the specified <literal>Permission</literal> from the backend permission store. Returns true if the operation was successful."
msgstr "Rimuove (revoca) il <literal>Permission</literal> specificato dal permission store sottostante. Restituisce true se l'operazione si è conclusa con esito positivo."

#. Tag: para
#: Security.xml:3915
#, no-c-format
msgid "Removes (revokes) the specified list of <literal>Permission</literal>s from the backend permission store. Returns true if the operation was successful."
msgstr "Rimuove (revoca) l'elenco di <literal>Permission</literal> specificato dal permission store sottostante. Restituisce true se l'operazione si è conclusa con esito positivo."

#. Tag: para
#: Security.xml:3934
#, no-c-format
msgid "Returns a list of the available actions for the specified target object. The actions that this method returns are dependent on the <literal>@Permission</literal> annotations configured on the target object's class."
msgstr "Restituisce un elenco delle azioni disponibili per l'oggetto obiettivo specificato. Le azioni che questo metodo restituisce dipendono dall'annotazione <literal>@Permission</literal> configurata nella classe dell'oggetto obiettivo."

#. Tag: title
#: Security.xml:3949
#, no-c-format
msgid "Permission checks for PermissionManager operations"
msgstr "Verifica dei permessi sulle operazioni di PermissionManager"

#. Tag: para
#: Security.xml:3951
#, no-c-format
msgid "Invoking the methods of <literal>PermissionManager</literal> requires that the currently-authenticated user has the appropriate authorization to perform that management operation. The following table lists the required permissions that the current user must have."
msgstr "Per chiamare un metodo di <literal>PermissionManager</literal> è richiesto che l'utente correntemente autenticato abbia le autorizzazioni appropriate per eseguire quella operazione di gestione. La seguente tabella elenca i permessi richiesti che l'utente corrente deve avere."

#. Tag: title
#: Security.xml:3958
#, no-c-format
msgid "Permission Management Security Permissions"
msgstr "Permessi per la gestione dei permessi"

#. Tag: literal
#: Security.xml:3982
#, no-c-format
msgid "listPermissions()"
msgstr "listPermissions()"

#. Tag: para
#: Security.xml:3986
#, no-c-format
msgid "The specified <literal>target</literal>"
msgstr "L'<literal>obiettivo</literal> specificato"

#. Tag: literal
#: Security.xml:3992
#, no-c-format
msgid "seam.read-permissions"
msgstr "seam.read-permissions"

#. Tag: literal
#: Security.xml:4000
#: Security.xml:4020
#, no-c-format
msgid "grantPermission()"
msgstr "grantPermission()"

#. Tag: para
#: Security.xml:4004
#, no-c-format
msgid "The target of the specified <literal>Permission</literal>, or each of the targets for the specified list of <literal>Permission</literal>s (depending on which method is called)."
msgstr "L'obiettivo del <literal>Permission</literal> specificato, oppure ciascuno degli obiettivi dell'elenco specificato di <literal>Permission</literal> (in funzione di quale metodo viene chiamato)."

#. Tag: literal
#: Security.xml:4012
#: Security.xml:4030
#: Security.xml:4048
#, no-c-format
msgid "seam.grant-permission"
msgstr "seam.grant-permission"

#. Tag: para
#: Security.xml:4024
#: Security.xml:4060
#, no-c-format
msgid "The target of the specified <literal>Permission</literal>."
msgstr "L'obiettivo del <literal>Permission</literal> specificato."

#. Tag: literal
#: Security.xml:4038
#, no-c-format
msgid "grantPermissions()"
msgstr "grantPermissions()"

#. Tag: para
#: Security.xml:4042
#: Security.xml:4078
#, no-c-format
msgid "Each of the targets of the specified list of <literal>Permission</literal>s."
msgstr "Ciascuno degli obiettivi dell'elenco di <literal>Permission</literal> specificato."

#. Tag: literal
#: Security.xml:4056
#, no-c-format
msgid "revokePermission()"
msgstr "revokePermission()"

#. Tag: literal
#: Security.xml:4066
#: Security.xml:4084
#, no-c-format
msgid "seam.revoke-permission"
msgstr "seam.revoke-permission"

#. Tag: literal
#: Security.xml:4074
#, no-c-format
msgid "revokePermissions()"
msgstr "revokePermissions()"

#. Tag: title
#: Security.xml:4097
#, no-c-format
msgid "SSL Security"
msgstr "Sicurezza SSL"

#. Tag: para
#: Security.xml:4099
#, no-c-format
msgid "Seam includes basic support for serving sensitive pages via the HTTPS protocol. This is easily configured by specifying a <literal>scheme</literal> for the page in <literal>pages.xml</literal>. The following example shows how the view <literal>/login.xhtml</literal> is configured to use HTTPS:"
msgstr "Seam include un supporto di base per servire le pagine sensibili tramite il protocollo HTTPS. Si configura facilmente specificando uno <literal>scheme</literal> per la pagina in <literal>pages.xml</literal>. Il seguente esempio mostra come la pagina <literal>/login.xhtml</literal> è configurata per usare HTTPS:"

#. Tag: programlisting
#: Security.xml:4106
#, no-c-format
msgid "<![CDATA[<page view-id=\"/login.xhtml\" scheme=\"https\"/>]]>"
msgstr "<![CDATA[<page view-id=\"/login.xhtml\" scheme=\"https\"/>]]>"

#. Tag: para
#: Security.xml:4108
#, no-c-format
msgid "This configuration is automatically extended to both <literal>s:link</literal> and <literal>s:button</literal> JSF controls, which (when specifying the <literal>view</literal>) will also render the link using the correct protocol. Based on the previous example, the following link will use the HTTPS protocol because <literal>/login.xhtml</literal> is configured to use it:"
msgstr "Questa configurazione viene automaticamente estesa ai controlli JSF <literal>s:link</literal> e <literal>s:button</literal>, i quali (quando viene specificata la <literal>view</literal>) faranno in modo che venga prodotto il link usando il protocollo corretto. In base al precedente esempio, il seguente link userà il protocollo HTTPS, perché <literal>/login.xhtml</literal> è configurata per usarlo:"

#. Tag: programlisting
#: Security.xml:4115
#, no-c-format
msgid "<![CDATA[<s:link view=\"/login.xhtml\" value=\"Login\"/>]]>"
msgstr "<![CDATA[<s:link view=\"/login.xhtml\" value=\"Login\"/>]]>"

#. Tag: para
#: Security.xml:4117
#, no-c-format
msgid "Browsing directly to a view when using the <emphasis>incorrect</emphasis> protocol will cause a redirect to the same view using the <emphasis>correct</emphasis> protocol. For example, browsing to a page that has <literal>scheme=\"https\"</literal> using HTTP will cause a redirect to the same page using HTTPS."
msgstr "Navigando direttamente sulla pagina mentre si usa il protocollo <emphasis>non corretto</emphasis> causerà una redirezione alla stessa pagina usando il protocollo <emphasis>corretto</emphasis>. Ad esempio, navigando su una pagina che ha <literal>scheme=\"https\"</literal> usando HTTP causerà una redirezione alla stessa pagina usando HTTPS."

#. Tag: para
#: Security.xml:4124
#, no-c-format
msgid "It is also possible to configure a <emphasis>default scheme</emphasis> for all pages. This is useful if you wish to use HTTPS for a only few pages. If no default scheme is specified then the normal behavior is to continue use the current scheme. So once the user accessed a page that required HTTPS, then HTTPS would continue to be used after the user navigated away to other non-HTTPS pages. (While this is good for security, it is not so great for performance!). To define HTTP as the default <literal>scheme</literal>, add this line to <literal>pages.xml</literal>:"
msgstr "E' anche possibile configurare un <emphasis>default scheme</emphasis> per tutte le pagine. Questo è utile se si vuole usare HTTPS solo per alcune pagine. Se non è indicato un default scheme, allora il comportamento normale è di continuare ad usare lo schema correntemente usato. Perciò una volta che l'utente ha fatto l'accesso ad una pagina che richiede HTTPS, allora HTTPS continuerà ad essere usato dopo che l'utente si sposta su altre pagine non HTTPS. (Mentre questo è buono per la sicurezza, non lo è per le prestazioni!). Per definire HTTP come <literal>default scheme</literal>, aggiungere questa riga a <literal>pages.xml</literal>:"

#. Tag: programlisting
#: Security.xml:4133
#, no-c-format
msgid "<![CDATA[<page view-id=\"*\" scheme=\"http\" />]]>"
msgstr "<![CDATA[<page view-id=\"*\" scheme=\"http\" />]]>"

#. Tag: para
#: Security.xml:4135
#, no-c-format
msgid "Of course, if <emphasis>none</emphasis> of the pages in your application use HTTPS then it is not required to specify a default scheme."
msgstr "Chiaramente, se <emphasis>nessuna</emphasis> delle pagine dell'applicazione usa HTTPS allora non è richiesto di specificare alcun default scheme."

#. Tag: para
#: Security.xml:4140
#, no-c-format
msgid "You may configure Seam to automatically invalidate the current HTTP session each time the scheme changes. Just add this line to <literal>components.xml</literal>:"
msgstr "E' possibile configurare Seam per invalidare automaticamente la sessione HTTP ogni volta che lo schema cambia. Basta aggiungere questa riga a <literal>components.xml</literal>:"

#. Tag: programlisting
#: Security.xml:4145
#, no-c-format
msgid "<![CDATA[<web:session invalidate-on-scheme-change=\"true\"/>]]>"
msgstr "<![CDATA[<web:session invalidate-on-scheme-change=\"true\"/>]]>"

#. Tag: para
#: Security.xml:4147
#, no-c-format
msgid "This option helps make your system less vulnerable to sniffing of the session id or leakage of sensitive data from pages using HTTPS to other pages using HTTP."
msgstr "Questa opzione aiuta a rendere il sistema meno vulnerabile alle intromissioni che rilevano l'id di sessione o alla mancanza di protezione su dati sensibili dalle pagine che usano HTTPS ad altre che usano HTTP."

#. Tag: title
#: Security.xml:4153
#, no-c-format
msgid "Overriding the default ports"
msgstr "Modificare le porte di default"

#. Tag: para
#: Security.xml:4155
#, no-c-format
msgid "If you wish to configure the HTTP and HTTPS ports manually, they may be configured in <literal>pages.xml</literal> by specifying the <literal>http-port</literal> and <literal>https-port</literal> attributes on the <literal>pages</literal> element:"
msgstr "Se si vogliono configurare manualmente le porte HTTP e HTTPS, queste possono essere configurate in <literal>pages.xml</literal> specificando gli attributi <literal>http-port</literal> e <literal>https-port</literal> nell'elemento <literal>pages</literal>:"

#. Tag: programlisting
#: Security.xml:4161
#, no-c-format
msgid ""
"<![CDATA[\n"
"<pages xmlns=\"http://jboss.org/schema/seam/pages\"\n"
"       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"       xsi:schemaLocation=\"http://jboss.org/schema/seam/pages http://jboss.org/schema/seam/pages-2.3.xsd\"\n"
"       no-conversation-view-id=\"/home.xhtml\"\n"
"       login-view-id=\"/login.xhtml\"\n"
"       http-port=\"8080\"\n"
"       https-port=\"8443\">      \n"
"      ]]>"
msgstr ""
"<![CDATA[\n"
"<pages xmlns=\"http://jboss.org/schema/seam/pages\"\n"
"       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"       xsi:schemaLocation=\"http://jboss.org/schema/seam/pages http://jboss.org/schema/seam/pages-2.3.xsd\"\n"
"       no-conversation-view-id=\"/home.xhtml\"\n"
"       login-view-id=\"/login.xhtml\"\n"
"       http-port=\"8080\"\n"
"       https-port=\"8443\">      \n"
"      ]]>"

#. Tag: title
#: Security.xml:4167
#, no-c-format
msgid "CAPTCHA"
msgstr "CAPTCHA"

#. Tag: para
#: Security.xml:4169
#, no-c-format
msgid "Though strictly not part of the security API, Seam provides a built-in CAPTCHA (<emphasis>C</emphasis>ompletely <emphasis>A</emphasis>utomated <emphasis>P</emphasis>ublic <emphasis>T</emphasis>uring test to tell <emphasis>C</emphasis>omputers and <emphasis>H</emphasis>umans <emphasis>A</emphasis>part) algorithm to prevent automated processes from interacting with your application."
msgstr "Sebbene non faccia strettamente parte delle API di sicurezza, Seam fornisce un algoritmo CAPTCHA (<emphasis>C</emphasis>ompletely <emphasis>A</emphasis>utomated <emphasis>P</emphasis>ublic <emphasis>T</emphasis>uring test to tell <emphasis>C</emphasis>omputer and <emphasis>H</emphasis>umans <emphasis>A</emphasis>part, test di Turing publico completamente automatico per distinguere gli umani dalle macchine) già fatto per prevenire l'interazione con l'applicazione da parte di procedure automatiche."

#. Tag: title
#: Security.xml:4177
#, no-c-format
msgid "Configuring the CAPTCHA Servlet"
msgstr "Configurare la servlet CAPTCHA"

#. Tag: para
#: Security.xml:4178
#, no-c-format
msgid "To get up and running, it is necessary to configure the Seam Resource Servlet, which will provide the Captcha challenge images to your pages. This requires the following entry in <literal>web.xml</literal>:"
msgstr "Per partire è necessario configurare la Seam Resource Servlet, che fornirà l'immagine CAPTCHA da risolvere nella pagina. Questo richiede la seguente voce in <literal>web.xml</literal>:"

#. Tag: programlisting
#: Security.xml:4183
#, no-c-format
msgid ""
"<![CDATA[<servlet>\n"
"    <servlet-name>Seam Resource Servlet</servlet-name>\n"
"    <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>\n"
"</servlet>\n"
"\n"
"<servlet-mapping>\n"
"    <servlet-name>Seam Resource Servlet</servlet-name>\n"
"    <url-pattern>/seam/resource/*</url-pattern>\n"
"</servlet-mapping>]]>"
msgstr ""
"<![CDATA[<servlet>\n"
"    <servlet-name>Seam Resource Servlet</servlet-name>\n"
"    <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>\n"
"</servlet>\n"
"\n"
"<servlet-mapping>\n"
"    <servlet-name>Seam Resource Servlet</servlet-name>\n"
"    <url-pattern>/seam/resource/*</url-pattern>\n"
"</servlet-mapping>]]>"

#. Tag: title
#: Security.xml:4188
#, no-c-format
msgid "Adding a CAPTCHA to a form"
msgstr "Aggiungere un CAPTCHA ad una form"

#. Tag: para
#: Security.xml:4190
#, no-c-format
msgid "Adding a CAPTCHA challenge to a form is extremely easy. Here's an example:"
msgstr "Aggiungere una verifica CAPTCHA ad una form è estremamente facile. Ecco un esempio:"

#. Tag: programlisting
#: Security.xml:4194
#, no-c-format
msgid ""
"<![CDATA[<h:graphicImage value=\"/seam/resource/captcha\"/>\n"
"<h:inputText id=\"verifyCaptcha\" value=\"#{captcha.response}\" required=\"true\">\n"
"   <s:validate />\n"
"</h:inputText>\n"
"<h:message for=\"verifyCaptcha\"/>]]>"
msgstr ""
"<![CDATA[<h:graphicImage value=\"/seam/resource/captcha\"/>\n"
"<h:inputText id=\"verifyCaptcha\" value=\"#{captcha.response}\" required=\"true\">\n"
"   <s:validate />\n"
"</h:inputText>\n"
"<h:message for=\"verifyCaptcha\"/>]]>"

#. Tag: para
#: Security.xml:4196
#, no-c-format
msgid "That's all there is to it. The <literal>graphicImage</literal> control displays the CAPTCHA challenge, and the <literal>inputText</literal> receives the user's response. The response is automatically validated against the CAPTCHA when the form is submitted."
msgstr "Questo è tutto. Il controllo <literal>graphicImage</literal> mostra l'immagine CAPTCHA e <literal>inputText</literal> riceve la risposta dell'utente. La risposta viene automaticamente validata con il CAPTCHA quando la form viene inviata."

#. Tag: title
#: Security.xml:4205
#, no-c-format
msgid "Customising the CAPTCHA algorithm"
msgstr "Personalizzare l'algoritmo CAPTCHA"

#. Tag: para
#: Security.xml:4207
#, no-c-format
msgid "You may customize the CAPTCHA algorithm by overriding the built-in component:"
msgstr "E' possibile personalizzare l'algoritmo CAPTCHA sovrascrivendo il componente già fatto:"

#. Tag: programlisting
#: Security.xml:4211
#, no-c-format
msgid ""
"<![CDATA[@Name(\"org.jboss.seam.captcha.captcha\")\n"
"@Scope(SESSION)\n"
"public class HitchhikersCaptcha extends Captcha\n"
"{\n"
"   @Override @Create\n"
"   public void init()\n"
"   {\n"
"      setChallenge(\"What is the answer to life, the universe and everything?\");\n"
"      setCorrectResponse(\"42\");\n"
"   }\n"
"\n"
"   @Override\n"
"   public BufferedImage renderChallenge()\n"
"   {\n"
"       BufferedImage img = super.renderChallenge();\n"
"       img.getGraphics().drawOval(5, 3, 60, 14); //add an obscuring decoration\n"
"       return img;\n"
"   }\n"
"}]]>"
msgstr ""
"<![CDATA[@Name(\"org.jboss.seam.captcha.captcha\")\n"
"@Scope(SESSION)\n"
"public class HitchhikersCaptcha extends Captcha\n"
"{\n"
"   @Override @Create\n"
"   public void init()\n"
"   {\n"
"      setChallenge(\"Qual è la risposta alla vita, all'universo e a tutto il resto?\");\n"
"      setCorrectResponse(\"42\");\n"
"   }\n"
"\n"
"   @Override\n"
"   public BufferedImage renderChallenge()\n"
"   {\n"
"       BufferedImage img = super.renderChallenge();\n"
"       img.getGraphics().drawOval(5, 3, 60, 14); //aggiungi qualche oscura decorazione\n"
"       return img;\n"
"   }\n"
"}]]>"

#. Tag: title
#: Security.xml:4218
#: Security.xml:4226
#, no-c-format
msgid "Security Events"
msgstr "Eventi della sicurezza"

#. Tag: para
#: Security.xml:4220
#, no-c-format
msgid "The following table describes a number of events (see <xref linkend=\"events\"/>) raised by Seam Security in response to certain security-related events."
msgstr "La seguente tabella descrive una serie di eventi (vedi <xref linkend=\"events\"/>) lanciati dalla sicurezza di Seam in corrispondenza di determinati eventi relativi alla sicurezza."

#. Tag: para
#: Security.xml:4235
#, no-c-format
msgid "Event Key"
msgstr "Nome dell'evento"

#. Tag: literal
#: Security.xml:4248
#, no-c-format
msgid "org.jboss.seam.security.loginSuccessful"
msgstr "org.jboss.seam.security.loginSuccessful"

#. Tag: para
#: Security.xml:4252
#, no-c-format
msgid "Raised when a login attempt is successful."
msgstr "Lanciato quando un tentativo di login è stato completato con esito positivo."

#. Tag: literal
#: Security.xml:4260
#, no-c-format
msgid "org.jboss.seam.security.loginFailed"
msgstr "org.jboss.seam.security.loginFailed"

#. Tag: para
#: Security.xml:4264
#, no-c-format
msgid "Raised when a login attempt fails."
msgstr "Lanciato quando un tentativo di login è fallito."

#. Tag: literal
#: Security.xml:4272
#, no-c-format
msgid "org.jboss.seam.security.alreadyLoggedIn"
msgstr "org.jboss.seam.security.alreadyLoggedIn"

#. Tag: para
#: Security.xml:4276
#, no-c-format
msgid "Raised when a user that is already authenticated attempts to log in again."
msgstr "Lanciato quando un utente che ha già fatto il login, tenta di fare il login di nuovo."

#. Tag: literal
#: Security.xml:4284
#, no-c-format
msgid "org.jboss.seam.security.notLoggedIn"
msgstr "org.jboss.seam.security.notLoggedIn"

#. Tag: para
#: Security.xml:4288
#, no-c-format
msgid "Raised when a security check fails when the user is not logged in."
msgstr "Lanciato quando una verifica di sicurezza fallisce in quanto l'utente non ha fatto il login."

#. Tag: literal
#: Security.xml:4296
#, no-c-format
msgid "org.jboss.seam.security.notAuthorized"
msgstr "org.jboss.seam.security.notAuthorized"

#. Tag: para
#: Security.xml:4300
#, no-c-format
msgid "Raised when a security check fails when the user is logged in however doesn't have sufficient privileges."
msgstr "Lanciato quando una verifica di sicurezza fallisce in quanto l'utente ha fatto il login ma non ha i privilegi richiesti."

#. Tag: literal
#: Security.xml:4308
#, no-c-format
msgid "org.jboss.seam.security.preAuthenticate"
msgstr "org.jboss.seam.security.preAuthenticate"

#. Tag: para
#: Security.xml:4312
#, no-c-format
msgid "Raised just prior to user authentication."
msgstr "Lanciato subito prima l'autenticazione dell'utente."

#. Tag: literal
#: Security.xml:4320
#, no-c-format
msgid "org.jboss.seam.security.postAuthenticate"
msgstr "org.jboss.seam.security.postAuthenticate"

#. Tag: para
#: Security.xml:4324
#, no-c-format
msgid "Raised just after user authentication."
msgstr "Lanciato subito dopo l'autenticazione dell'utente."

#. Tag: literal
#: Security.xml:4332
#, no-c-format
msgid "org.jboss.seam.security.loggedOut"
msgstr "org.jboss.seam.security.loggedOut"

#. Tag: para
#: Security.xml:4336
#, no-c-format
msgid "Raised after the user has logged out."
msgstr "Lanciato dopo che l'utente ha fatto un logout."

#. Tag: literal
#: Security.xml:4344
#, no-c-format
msgid "org.jboss.seam.security.credentialsUpdated"
msgstr "org.jboss.seam.security.credentialsUpdated"

#. Tag: para
#: Security.xml:4348
#, no-c-format
msgid "Raised when the user's credentials have been changed."
msgstr "Lanciato quando le credenziali dell'utente vengono cambiate."

#. Tag: literal
#: Security.xml:4356
#, no-c-format
msgid "org.jboss.seam.security.rememberMe"
msgstr "org.jboss.seam.security.rememberMe"

#. Tag: para
#: Security.xml:4360
#, no-c-format
msgid "Raised when the Identity's rememberMe property is changed."
msgstr "Lanciato quando la proprietà RememberMe di Identity viene modificata."

#. Tag: title
#: Security.xml:4373
#, no-c-format
msgid "Run As"
msgstr "Run As"

#. Tag: para
#: Security.xml:4375
#, no-c-format
msgid "Sometimes it may be necessary to perform certain operations with elevated privileges, such as creating a new user account as an unauthenticated user. Seam Security supports such a mechanism via the <literal>RunAsOperation</literal> class. This class allows either the <literal>Principal</literal> or <literal>Subject</literal>, or the user's roles to be overridden for a single set of operations."
msgstr "A volte può essere necessario eseguire determinate operazioni con dei privilegi più elevati, come creare un nuovo utente da parte di un utente non autenticato. La sicurezza di Seam gestisce un tale meccanismo tramite la classe <literal>RunAsOperation</literal>. Questa classe consente sia al <literal>Principal</literal> o al <literal>Subject</literal>, che ai ruoli dell'utente di essere sovrascritti per un singolo insieme di operazioni."

#. Tag: para
#: Security.xml:4383
#, no-c-format
msgid "The following code example demonstrates how <literal>RunAsOperation</literal> is used, by calling its <literal>addRole()</literal> method to provide a set of roles to masquerade as for the duration of the operation. The <literal>execute()</literal> method contains the code that will be executed with the elevated privileges."
msgstr "Il seguente codice di esempio mostra come viene usato <literal>RunAsOperation</literal>, chiamando il suo metodo <literal>addRole()</literal> per fornire un insieme di ruoli fittizi solo per la durata dell'operazione. Il metodo <literal>execute()</literal> contiene il codice che verrà eseguito con i privilegi aggiuntivi."

#. Tag: programlisting
#: Security.xml:4390
#, no-c-format
msgid ""
"<![CDATA[    new RunAsOperation() {       \n"
"       public void execute() {\n"
"          executePrivilegedOperation();\n"
"       }         \n"
"    }.addRole(\"admin\")\n"
"     .run();]]>"
msgstr ""
"<![CDATA[    new RunAsOperation() {       \n"
"       public void execute() {\n"
"          executePrivilegedOperation();\n"
"       }         \n"
"    }.addRole(\"admin\")\n"
"     .run();]]>"

#. Tag: para
#: Security.xml:4392
#, no-c-format
msgid "In a similar way, the <literal>getPrincipal()</literal> or <literal>getSubject()</literal> methods can also be overriden to specify the <literal>Principal</literal> and <literal>Subject</literal> instances to use for the duration of the operation. Finally, the <literal>run()</literal> method is used to carry out the <literal>RunAsOperation</literal>."
msgstr "In modo analogo, i metodi <literal>getPrincipal()</literal> o <literal>getSubject()</literal> possono anch'essi essere sovrascritti per specificare le istanze di <literal>Principal</literal> e <literal>Subject</literal> da usare per la durata dell'operazione. Infine, il metodo <literal>run()</literal> è usato per eseguire la <literal>RunAsOperation</literal>."

#. Tag: title
#: Security.xml:4403
#, no-c-format
msgid "Extending the Identity component"
msgstr "Estendere il componente Identity"

#. Tag: para
#: Security.xml:4405
#, no-c-format
msgid "Sometimes it might be necessary to extend the Identity component if your application has special security requirements. The following example (contrived, as credentials would normally be handled by the <literal>Credentials</literal> component instead) shows an extended Identity component with an additional <literal>companyCode</literal> field. The install precendence of <literal>APPLICATION</literal> ensures that this extended Identity gets installed in preference to the built-in Identity."
msgstr "A volte può essere necessario estendere il componente Identity se l'applicazione ha particolari requisiti di sicurezza. Il seguente esempio (fatto di proposito, dato che le credenziali sarebbero normalmente gestite dal componente <literal>Credentials</literal>) mostra un componente Identity esteso con un campo <literal>companyCode</literal> aggiuntivo. La precendenza di installazione impostata a <literal>APPLICATION</literal> assicura che questo Identity esteso venga installato al posto dell'Identity originale."

#. Tag: programlisting
#: Security.xml:4413
#, no-c-format
msgid ""
"<![CDATA[@Name(\"org.jboss.seam.security.identity\")\n"
"@Scope(SESSION)\n"
"@Install(precedence = APPLICATION)\n"
"@BypassInterceptors\n"
"@Startup\n"
"public class CustomIdentity extends Identity\n"
"{\n"
"   private static final LogProvider log = Logging.getLogProvider(CustomIdentity.class);\n"
"\n"
"   private String companyCode;\n"
"\n"
"   public String getCompanyCode()\n"
"   {\n"
"      return companyCode;\n"
"   }\n"
"\n"
"   public void setCompanyCode(String companyCode)\n"
"   {\n"
"      this.companyCode = companyCode;\n"
"   }\n"
"\n"
"   @Override\n"
"   public String login()\n"
"   {\n"
"      log.info(\"###### CUSTOM LOGIN CALLED ######\");\n"
"      return super.login();\n"
"   }\n"
"}]]>"
msgstr ""
"<![CDATA[@Name(\"org.jboss.seam.security.identity\")\n"
"@Scope(SESSION)\n"
"@Install(precedence = APPLICATION)\n"
"@BypassInterceptors\n"
"@Startup\n"
"public class CustomIdentity extends Identity\n"
"{\n"
"   private static final LogProvider log = Logging.getLogProvider(CustomIdentity.class);\n"
"\n"
"   private String companyCode;\n"
"\n"
"   public String getCompanyCode()\n"
"   {\n"
"      return companyCode;\n"
"   }\n"
"\n"
"   public void setCompanyCode(String companyCode)\n"
"   {\n"
"      this.companyCode = companyCode;\n"
"   }\n"
"\n"
"   @Override\n"
"   public String login()\n"
"   {\n"
"      log.info(\"###### CUSTOM LOGIN CALLED ######\");\n"
"      return super.login();\n"
"   }\n"
"}]]>"

#. Tag: para
#: Security.xml:4416
#, no-c-format
msgid "Note that an <literal>Identity</literal> component must be marked <literal>@Startup</literal>, so that it is available immediately after the <literal>SESSION</literal> context begins. Failing to do this may render certain Seam functionality inoperable in your application."
msgstr "Notare che un componente <literal>Identity</literal> deve essere marcato <literal>@Startup</literal>, in modo che sia disponibile immediatamente dopo l'inizio del contesto <literal>SESSION</literal>. La mancanza di questo dettaglio renderebbe non utilizzabili determinate funzionalità di Seam nell'applicazione."

#. Tag: title
#: Security.xml:4428
#, no-c-format
msgid "OpenID"
msgstr "OpenID"

#. Tag: para
#: Security.xml:4430
#, no-c-format
msgid "OpenID is a community standard for external web-based authentication. The basic idea is that any web application can supplement (or replace) its local handling of authentication by delegating responsibility to an external OpenID server of the user's chosing. This benefits the user, who no longer has to remember a name and password for every web application he uses, and the developer, who is relieved of some of the burden of maintaining a complex authentication system."
msgstr "OpenID è un standard comune per l'autenticazione esterna sul web. L'idea fondamentale è che qualsiasi applicazione web possa integrare (o sostituire) la sua gestione locale dell'autenticazione delegandone la responsabilità ad un server OpenID esterno scelto dall'utente. Questo va a beneficio dell'utente che non deve più ricordare un nome e una password per ogni applicazione web che usa, e dello sviluppatore, che viene sollevato di un po' di problemi nel manutenere un complesso sistema di autenticazione."

#. Tag: para
#: Security.xml:4439
#, no-c-format
msgid "When using OpenID, the user selects an OpenID provider, and the provider assigns the user an OpenID. The id will take the form of a URL, for example <literal>http://maximoburrito.myopenid.com</literal> however, it's acceptable to leave off the <literal>http://</literal> part of the identifier when logging into a site. The web application (known as a relying party in OpenID-speak) determines which OpenID server to contact and redirects the user to the remote site for authentication. Upon successful authentication the user is given the (cryptographically secure) token proving his identity and is redirected back to the original web application.The local web application can then be sure the user accessing the application controls the OpenID he presented."
msgstr "Quando si usa OpenID, l'utente sceglie un fornitore OpenID, e il fornitore OpenID assegna all'utente un OpenID. Questo id prende la forma di un URL, ad esempio <literal>http://grandepizza.myopenid.com</literal>, comunque è accettabile trascurare la parte <literal>http://</literal> dell'identificativo quando si fa il login ad un sito. L'applicazione web (detta relying party in termini OpenID) determina quale server OpenID deve contattare e redirige l'utente a quel sito per l'autenticazione. Dopo essersi autenticato con esito positivo, all'utente viene fornito un codice (crittograficamente sicuro) che prova la sua identità e viene rediretto di nuovo all'applicazione web originale. L'applicazione web locale può essere quindi sicura che l'utente che sta accedendo è il proprietario dell'OpenID che aveva fornito."

#. Tag: para
#: Security.xml:4448
#, no-c-format
msgid "It's important to realize at this point that authentication does not imply authorization. The web application still needs to make a determination of how to use that information. The web application could treat the user as instantly logged in and give full access to the system or it could try and map the presented OpenID to a local user account, prompting the user to register if he hasn't already. The choice of how to handle the OpenID is left as a design decision for the local application."
msgstr "E' importante rendersi conto, a questo punto, che l'autenticazione non implica l'autorizzazione. L'applicazione web ha ancora bisogno di fare delle considerazioni su come usare quell'informazione. L'applicazione web potrebbe trattare l'utente come immediatamente autenticato e dargli/le pieno accesso al sistema, oppure potrebbe tentare di associare l'OpenID fornito ad un utente locale, chiedendo all'utente di registrarsi se non l'ha già fatto. La scelta su come gestire l'OpenID è lasciata ad una decisione progettuale dell'applicazione locale."

#. Tag: title
#: Security.xml:4458
#, no-c-format
msgid "Configuring OpenID"
msgstr "Configurare OpenID"

#. Tag: para
#: Security.xml:4459
#, no-c-format
msgid "Seam uses the openid4java package and requires four additional JARs to make use of the Seam integration. These are: <literal>htmlparser.jar</literal>, <literal>openid4java.jar</literal>, <literal>openxri-client.jar</literal> and <literal>openxri-syntax.jar</literal>."
msgstr "Seam usa il pacchetto openid4java e richiede quattro JAR aggiuntivi per usare l'integrazione Seam. Essi sono: <literal>htmlparser.jar</literal>, <literal>openid4java.jar</literal>, <literal>openxri-client.jar</literal> e <literal>openxri-syntax.jar</literal>."

#. Tag: para
#: Security.xml:4465
#, no-c-format
msgid "OpenID processing requires the use of the <literal>OpenIdPhaseListener</literal>, which should be added to your <literal>faces-config.xml</literal> file. The phase listener processes the callback from the OpenID provider, allowing re-entry into the local application."
msgstr "L'elaborazione di OpenID richiede l'uso di <literal>OpenIdPhaseListener</literal>, che deve essere aggiunto al file <literal>faces-config.xml</literal>. Il phase listener elabora le chiamate dal fornitore OpenID, consentendo di rientrare nell'applicazione locale."

#. Tag: programlisting
#: Security.xml:4471
#, no-c-format
msgid ""
"&lt;lifecycle&gt;\n"
"    &lt;phase-listener&gt;org.jboss.seam.security.openid.OpenIdPhaseListener&lt;/phase-listener&gt;\n"
"&lt;/lifecycle&gt;"
msgstr ""
"&lt;lifecycle&gt;\n"
"    &lt;phase-listener&gt;org.jboss.seam.security.openid.OpenIdPhaseListener&lt;/phase-listener&gt;\n"
"&lt;/lifecycle&gt;"

#. Tag: para
#: Security.xml:4474
#, no-c-format
msgid "With this configuration, OpenID support is available to your application. The OpenID support component, <literal>org.jboss.seam.security.openid.openid</literal>, is installed automatically if the openid4java classes are on the classpath."
msgstr "Con questa configurazione il supporto OpenID è disponibile nell'applicazione. Il componente per il supporto OpenID, <literal>org.jboss.seam.security.openid.openid</literal>, viene installato automaticamente se le classi openid4java sono nel classpath."

#. Tag: title
#: Security.xml:4482
#, no-c-format
msgid "Presenting an OpenIdDLogin form"
msgstr "Persentare una form di login OpenID"

#. Tag: para
#: Security.xml:4484
#, no-c-format
msgid "To initiate an OpenID login, you can present a simply form to the user asking for the user's OpenID. The <literal>#{openid.id}</literal> value accepts the user's OpenID and the <literal>#{openid.login}</literal> action initiates an authentication request."
msgstr "Per iniziare un login con OpenID occorre presentare una semplice form che chieda all'utente il suo OpenID. Il valore <literal>#{openid.id}</literal> accetta l'OpenID dell'utente e l'azione <literal>#{openid.login]</literal> inizia la richiesta di autenticazione."

#. Tag: programlisting
#: Security.xml:4489
#, no-c-format
msgid ""
"&lt;h:form&gt;\n"
"    &lt;h:inputText value=&quot;#{openid.id}&quot; /&gt;\n"
"    &lt;h:commandButton action=&quot;#{openid.login}&quot; value=&quot;OpenID Login&quot;/&gt;\n"
"&lt;/h:form&gt;"
msgstr ""
"&lt;h:form&gt;\n"
"    &lt;h:inputText value=&quot;#{openid.id}&quot; /&gt;\n"
"    &lt;h:commandButton action=&quot;#{openid.login}&quot; value=&quot;OpenID Login&quot;/&gt;\n"
"&lt;/h:form&gt;"

#. Tag: para
#: Security.xml:4491
#, no-c-format
msgid "When the user submits the login form, he will be redirected to his OpenID provider. The user will eventually return to your application through the Seam pseudo-view <literal>/openid.xhtml</literal>, which is provided by the <literal>OpenIdPhaseListener</literal>. Your application can handle the OpenID response by means of a <literal>pages.xml</literal> navigation from that view, just as if the user had never left your application."
msgstr "Quando l'utente invia la form di login, viene rediretto al suo fornitore OpenID. L'utente torna infine all'applicazione tramite la pseudo pagina Seam <literal>/openid.xhtml</literal>, che è fornita dal <literal>OpenIdPhaseListener</literal>. L'applicazione può gestire la risposta OpenID per mezzo della navigazione indicata in <literal>pages.xml</literal> per quella pagina, proprio come se l'utente non avesse mai lasciato l'applicazione."

#. Tag: title
#: Security.xml:4500
#, no-c-format
msgid "Logging in immediately"
msgstr "Eseguire il login immediatamente"

#. Tag: para
#: Security.xml:4502
#, no-c-format
msgid "The simplest strategy is to simply login the user immediately. The following navigation rule shows how to handle this using the <literal>#{openid.loginImmediately()}</literal> action."
msgstr "La strategia più semplice è di eseguire immediatamente il login dell'utente. La seguente regola di navigazione mostra come gestire questa modalità usando l'azione <literal>#{openid.loginImmediately()}</literal>."

#. Tag: programlisting
#: Security.xml:4506
#, no-c-format
msgid ""
"&lt;page view-id=&quot;/openid.xhtml&quot;&gt;\n"
"    &lt;navigation evaluate=&quot;#{openid.loginImmediately()}&quot;&gt;\n"
"        &lt;rule if-outcome=&quot;true&quot;&gt;\n"
"            &lt;redirect view-id=&quot;/main.xhtml&quot;&gt;\n"
"                &lt;message&gt;OpenID login successful...&lt;/message&gt;\n"
"            &lt;/redirect&gt;\n"
"        &lt;/rule&gt;\n"
"        &lt;rule if-outcome=&quot;false&quot;&gt;\n"
"            &lt;redirect view-id=&quot;/main.xhtml&quot;&gt;\n"
"                &lt;message&gt;OpenID login rejected...&lt;/message&gt;\n"
"            &lt;/redirect&gt;\n"
"        &lt;/rule&gt;\n"
"    &lt;/navigation&gt;\n"
"&lt;/page&gt;"
msgstr ""
"&lt;page view-id=&quot;/openid.xhtml&quot;&gt;\n"
"    &lt;navigation evaluate=&quot;#{openid.loginImmediately()}&quot;&gt;\n"
"        &lt;rule if-outcome=&quot;true&quot;&gt;\n"
"            &lt;redirect view-id=&quot;/main.xhtml&quot;&gt;\n"
"                &lt;message&gt;OpenID login completato con esito positivo...&lt;/message&gt;\n"
"            &lt;/redirect&gt;\n"
"        &lt;/rule&gt;\n"
"        &lt;rule if-outcome=&quot;false&quot;&gt;\n"
"            &lt;redirect view-id=&quot;/main.xhtml&quot;&gt;\n"
"                &lt;message&gt;OpenID login rifiutato...&lt;/message&gt;\n"
"            &lt;/redirect&gt;\n"
"        &lt;/rule&gt;\n"
"    &lt;/navigation&gt;\n"
"&lt;/page&gt;"

#. Tag: para
#: Security.xml:4508
#, no-c-format
msgid "Thie <literal>loginImmediately()</literal> action checks to see if the OpenID is valid. If it is valid, it adds an OpenIDPrincipal to the identity component, marks the user as logged in (i.e. <literal>#{identity.loggedIn}</literal> will be true) and returns true. If the OpenID was not validated, the method returns false, and the user re-enters the application un-authenticated. If the user's OpenID is valid, it will be accessible using the expression <literal>#{openid.validatedId}</literal> and <literal>#{openid.valid}</literal> will be true."
msgstr "L'azione <literal>loginImmediately()</literal> controlla per vedere se l'OpenID è valido. Se è valido, aggiunge un OpenIDPrincipal al componente identity, marca l'utente come loggato (cioè <literal>#{identity.loggedIn}</literal> sarà true) e restituisce true. Se l'OpenID non è stato validato, il metodo restituisce false, e l'utente rientra nell'applicazione non autenticato. se l'OpenID dell'utente è valido, esso sarà accessibile usando l'espressione <literal>#{openid.validatedId}</literal> e <literal>#{openid.valid}</literal> sarà true."

#. Tag: title
#: Security.xml:4519
#, no-c-format
msgid "Deferring login"
msgstr "Rimandare il login"

#. Tag: para
#: Security.xml:4521
#, no-c-format
msgid "You may not want the user to be immediately logged in to your application. In that case, your navigation should check the <literal>#{openid.valid}</literal> property and redirect the user to a local registration or processing page. Actions you might take would be asking for more information and creating a local user account or presenting a captcha to avoid programmatic registrations. When you are done processing, if you want to log the user in, you can call the <literal>loginImmediately</literal> method, either through EL as shown previously or by directly interaction with the <literal>org.jboss.seam.security.openid.OpenId</literal> component. Of course, nothing prevents you from writing custom code to interact with the Seam identity component on your own for even more customized behaviour."
msgstr "Si può desiderare di non autenticare immediatamente l'utente nell'applicazione. In questo caso la navigazione dovrà controllare la proprietà <literal>#{openid.valid}</literal> e redirigere l'utente ad una pagina per la registrazione o l'elaborazione dell'utente. Le azioni che si possono prendere sono di chiedere maggiori informazioni e creare un utente locale, oppure presentare un CAPTCHA per evitare registrazioni da programmi automatici. Quando questa elaborazione è terminata, se si vuole autenticare l'utente è possibile chiamare il metodo <literal>loginImmediately</literal>, sia tramite EL come mostrato in precedenza, sia interagendo direttamento con il componente <literal>org.jboss.seam.security.openid.OpenId</literal>. Ovviamente niente impedisce di scrivere da soli del codice personalizzato per interagire con il componente Seam Identity per avere un comportamento più personalizzato."

#. Tag: title
#: Security.xml:4535
#, no-c-format
msgid "Logging out"
msgstr "Log out"

#. Tag: para
#: Security.xml:4537
#, no-c-format
msgid "Logging out (forgetting an OpenID association) is done by calling <literal>#{openid.logout}</literal>. If you are not using Seam security, you can call this method directly. If you are using Seam security, you should continue to use <literal>#{identity.logout}</literal> and install an event handler to capture the logout event, calling the OpenID logout method."
msgstr "Il log out (dimenticando l'associazione OpenID) viene fatto chiamando <literal>#{openid.logout}</literal>. Se non si sta usando la sicurezza Seam è possibile chiamare questo metodo direttamente. Se si sta usando la sicurezza Seam occorre continuare ad usare <literal>#{identity.logout}</literal> e installare un gestore di eventi per catturare l'evento logout, chiamando il metodo logout di OpenID."

#. Tag: programlisting
#: Security.xml:4544
#, no-c-format
msgid ""
"&lt;event type=&quot;org.jboss.seam.security.loggedOut&quot;&gt;\n"
"    &lt;action execute=&quot;#{openid.logout}&quot; /&gt;\n"
"&lt;/event&gt;"
msgstr ""
"&lt;event type=&quot;org.jboss.seam.security.loggedOut&quot;&gt;\n"
"    &lt;action execute=&quot;#{openid.logout}&quot; /&gt;\n"
"&lt;/event&gt;"

#. Tag: para
#: Security.xml:4546
#, no-c-format
msgid "It's important that you do not leave this out or the user will not be able to login again in the same session."
msgstr "E' importante non trascurare questo punto altrimenti l'utente non sarà più in grado di eseguire nuovamente il login nella stessa sessione."

