RobertoBifulco.it

  • topics
  • publications
  • il gatto
  • account
Home

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

1
2
3
4
5
6
7
8
9
public interface PrincipalRepository {
 
        public String getPrincipalPassword(String principalID) 
                        throws ImpossibleToIdentifyPrincipalException;
        
        public String getPrincipalRole(String principalID) 
                        throws ImpossibleToIdentifyPrincipalException;
 
}

[/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!

  • Java
  • Printer-friendly version

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.
  • topics
  • publications
  • il gatto
  • account