Friendly USer Authorization syste
Roberto Bifulco — Sun, 10/05/2008 - 10:31
fusa e' un sistema RBAC (Role Based Access Control) per la gestione dell'identificazione, autenticazione ed autorizzazione delle operazioni in un sistema multi-utente che adopera la tecnologia Java. L'obiettivo di fusa e' realizzare un sistema RBAC leggero e semplice che consenta un rapido sviluppo di una applicazione multi-utente, senza dover gestire le complesse infrastrutture legate alla gestione di ruoli e permessi.
Esempio d'uso
Le operazioni protette da fusa devono essere definite implementando l'interfaccia Operation. Per fare un esempio poco usato, definiremo l'operazione "Hello World":
[collapse]
HelloWorld
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class HelloWorld implements Operation { public static String ID = "HelloWorld"; public Object[] execute(Object[] args) throws IncorrectParamsException, Exception { System.out.println("Hello World!"); return null; } public String getDescription() { return "Print 'Hello World'"; } public String getID() { return ID; } }
[/collapse]
A questo punto possiamo registrare l'operazione cosi' definita al gestore delle operazioni (che e' chiamato IAS):
1 2 IAS ias = IAS.getIAS(); ias.getOperations.add(new HelloWorld());
Infine, possiamo adoperare IAS autenticare un utente e per richiedere il permesso per eseguire un'operazione:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 try{ IAS ias = IAS.getIAS(); Principal user = ias.getPrincipal("user","password"); Operation operation = ias.getOperation(HelloWorld.ID, user); // The operation HelloWorld has no parameters defined, // so the argoument passed is just null operation.execute(null); } catch (ImpossibleToIdentifyPrincipalException e){ System.err.println("Principal authentication failed!"); } catch (UnauthorizedOperationException e){ System.err.println("Unauthorized operation!"); } catch (RoleUndefinedException e){ System.err.println("User role doesn't defined!"); }
L'esempio mostrato riporta un caso "operativo", poiche' il sistema risulta gia' pronto ad essere adoperato. In realta', per avviare fusa, e' necessario fornire le opportune informazioni sugli utenti e sui ruoli definiti nel sistema.
Per mantenere un approccio leggero e ridurre al minimo il codice contenuto nel framework, fusa richiede la realizzazione esterna dei repository di utenti (piu' generalmente, nel sistema ci si riferisce agli utenti col nome di principal) e ruoli. Questa realizzazione si concretizza semplicemente nell'implementare le interfacce RoleRepository e PrincipalRepository.
[collapse]
RoleRepository
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public interface RoleRepository { /** * Extract the operation's identificators associated with the given Role name */ public String[] getRoleOperations(String roleName) throws RoleUndefinedException; /** * Extract all defined roles from the repository */ public String[] getRoles(); }
[/collapse]
[collapse]
PrincipalRepository
[/collapse]
Entrambe le interfacce possono essere realizzate nel modo che piu' si adatta al sistema su cui e' adoperato fusa. Ad esempio, e' possibile realizzare i repository con file di testo, file XML, DBMS, ecc.
...coming soon...
fusa - Community forums: join the (new... really new) community!

Post new comment