2009-07-01 5 views
2

Je suis actuellement en train de créer une application financière Java à laquelle je dois ajouter des droits, et je me demandais quelles approches les gens avaient prises pour résoudre ce problème, et s'il y avait des bibliothèques tierces recommandées.Standard Entitlements Modèle

Actuellement, j'ai un certain nombre d'utilisateurs qui peuvent être largement classés en rôles (par exemple "trader"). Chaque rôle peut avoir zéro ou plusieurs autorisations associées (par exemple "créer un échange").

Les décisions de conception:

Est-il préférable d'avoir des autorisations plus générales (par exemple le « commerce ») ainsi que des actions d'accompagnement (« créer », « mise à jour », « supprimer ») ou plus des autorisations descriptives ("par exemple "create trade")?

Quel est un bon moyen de modéliser le fait que certaines permissions sont paramétrées (par exemple, l'utilisateur X a la permission de "créer un trade" mais seulement pour les actions échangées sur le LSE)? paires de nom-valeur avant, mais cela semble plutôt laid.Ma seule idée de pensée ici est de mettre en œuvre Permission en tant que visiteur (voir l'exemple de code ci-dessous), mais je suis inquiet de l'interface pourrait devenir lourd (un s les objets #business augmentent).

public interface Permission { 
    void checkPermission(Trade trade) throws SecurityPermission; 
    void checkPermission(AnotherBusinessObject obj) throws SecurityPermission; 
} 

public class ExchangePermission implements Permission { 
    private final Exchange exchange; 

    public void checkPermission(Trade trade) { 
    if (!exchange.equals(trade.getExchange())) { 
     throw new SecurityException(); 
    } 
    } 
} 

Toutes idées/suggestions sont les bienvenues. Merci d'avance.

Répondre

3

"Entitlements" n'est pas le bon terme ici - le terme établi est Capabilities, bien que "Permissions" est également largement utilisé - et Java a déjà un Permission API qu'il utilise pour restreindre le code dans un environnement sandbox. Voyez si vous pouvez utiliser cela au lieu de définir vos propres classes.

Je dirais qu'un certain type de conception de rappel va être nécessaire, et la méthode implies() dans l'API Java Permission peut également être utile.

+0

vrai, API d'autorisation est un bon point de départ +1 – dfa

1

Cela vaut la peine de jeter un coup d'œil à acegi, qui fournit un cadre de sécurité formidable et pourrait vous faire économiser beaucoup de travail. Et même si vous ne l'utilisez pas, cela pourrait au moins vous donner des idées sur la façon dont vous devriez l'appliquer vous-même.

Bien que Acegi est conçu pour être utilisé avec le printemps, il est également possible de l'utiliser without Spring