2010-11-08 3 views
0

comment puis-je limiter les mises à jour des données restreintes de domaine?Filtre Hibernate pour mise à jour?

Disons que j'ai des utilisateurs de ma demande de mise en veille prolongée, qui sont autorisés à voir tous les contrats d'un pays spécifique (ie filtre: country = « US »)

Comment puis-je assurer que cet utilisateur ne peut insérer nouveaux enregistrements avec country = 'US'?

Existe-t-il quelque chose comme "un filtre pour restreindre les instructions de mise à jour" dans Hibernate?

Répondre

1

Vous pouvez le faire à la couche Mise en veille prolongée en mettant en œuvre un droit de veto PreUpdateListener/PreInsertListener et la mise à jour, mais ce serait probablement trop tuer dans la plupart des cas.

Je le ferais uniquement si cela était critique pour des raisons de sécurité et que cela aurait en plus de la logique de validation plus proche de la couche View ou Controller. Vous ne mentionnez pas ce type d'application, mais pratiquement tous les frameworks d'interface utilisateur (Web, desktop ou mobile) ont un support de validation qui rendra plus facile la gestion de ce type de logique (par opposition à la gestion des exceptions de la couche de persistance).).

1

Une option consiste à gérer le contrôle dans votre DAO par exemple:

public void saveContract(Contract contract, String countryCode) { 

    if (contract.getCountryCode().equals(countryCode)) { 
    threw InvalidContractException 
    } else { 
    saveContract(contract) } 

    private void saveContract(Contract contract) 

Je ne pense pas qu'il puisse être vérifié déclarative.

Si les utilisateurs sont authentifiés au niveau DB, c'est-à-dire. chaque application utilisateur propre utilisateur db de, alors vous pouvez créer une table

db_user, ctry

et renvoyer le à ce tableau dans le mappage de contrat à l'aide!

ou vous pouvez utiliser une base de données privée virtuelle

Questions connexes