Author: echatellier Date: 2013-05-14 12:54:27 +0200 (Tue, 14 May 2013) New Revision: 222 Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/222 Log: fixes #2417: Document:Pb gestion des droits de modification/suppression Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ReadDocumentPage.java Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java 2013-05-06 15:03:00 UTC (rev 221) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java 2013-05-14 10:54:27 UTC (rev 222) @@ -27,10 +27,12 @@ import nc.ird.cantharella.data.exceptions.DataConstraintException; import nc.ird.cantharella.data.exceptions.DataNotFoundException; import nc.ird.cantharella.data.model.Document; +import nc.ird.cantharella.data.model.Lot; import nc.ird.cantharella.data.model.TypeDocument; +import nc.ird.cantharella.data.model.Utilisateur; +import nc.ird.cantharella.data.model.Utilisateur.TypeDroit; import nc.ird.cantharella.data.model.utils.DocumentAttachable; import nc.ird.cantharella.service.exceptions.InvalidFileExtensionException; -import nc.ird.cantharella.service.utils.normalizers.DocumentNormalizer; import nc.ird.cantharella.service.utils.normalizers.TypeDocumentNormalizer; import nc.ird.cantharella.service.utils.normalizers.UniqueFieldNormalizer; import nc.ird.cantharella.service.utils.normalizers.utils.Normalize; @@ -123,4 +125,14 @@ @Transactional(readOnly = true) void addDocumentContent(Document document, String clientFileName, String contentType, byte[] content) throws InvalidFileExtensionException; + + /** + * Détermine si un utilisateur peut modifier ou supprimer un document. + * + * @param document Document + * @param utilisateur Utilisateur + * @return TRUE si il a le droit + */ + @Transactional(readOnly = true) + public boolean updateOrdeleteDocumentEnabled(Document document, Utilisateur utilisateur); } Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java 2013-05-06 15:03:00 UTC (rev 221) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java 2013-05-14 10:54:27 UTC (rev 222) @@ -39,6 +39,8 @@ import nc.ird.cantharella.data.exceptions.UnexpectedException; import nc.ird.cantharella.data.model.Document; import nc.ird.cantharella.data.model.TypeDocument; +import nc.ird.cantharella.data.model.Utilisateur; +import nc.ird.cantharella.data.model.Utilisateur.TypeDroit; import nc.ird.cantharella.data.model.utils.AbstractModel; import nc.ird.cantharella.data.model.utils.DocumentAttachable; import nc.ird.cantharella.service.exceptions.InvalidFileExtensionException; @@ -194,4 +196,11 @@ throw new UnexpectedException("Can't manipulate image", ex); } } + + /** {@inheritDoc} */ + @Override + public boolean updateOrdeleteDocumentEnabled(Document document, Utilisateur utilisateur) { + return utilisateur.getTypeDroit() == TypeDroit.ADMINISTRATEUR + || utilisateur.getIdPersonne() == document.getCreateur().getIdPersonne(); + } } Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java 2013-05-06 15:03:00 UTC (rev 221) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java 2013-05-14 10:54:27 UTC (rev 222) @@ -181,8 +181,8 @@ CollectionTools.findWithValue(personnes, "idPersonne", AccessType.GETTER, documentModel.getObject() .getCreateur().getIdPersonne())); documentModel.getObject().setTypeDocument( - CollectionTools.findWithValue(typeDocuments, "idTypeDocument", AccessType.GETTER, documentModel.getObject() - .getTypeDocument().getIdTypeDocument())); + CollectionTools.findWithValue(typeDocuments, "idTypeDocument", AccessType.GETTER, documentModel + .getObject().getTypeDocument().getIdTypeDocument())); } // champ fichier Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ReadDocumentPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ReadDocumentPage.java 2013-05-06 15:03:00 UTC (rev 221) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ReadDocumentPage.java 2013-05-14 10:54:27 UTC (rev 222) @@ -24,6 +24,7 @@ import nc.ird.cantharella.data.exceptions.DataConstraintException; import nc.ird.cantharella.data.model.Document; +import nc.ird.cantharella.data.model.Utilisateur; import nc.ird.cantharella.data.model.utils.DocumentAttachable; import nc.ird.cantharella.service.services.DocumentService; import nc.ird.cantharella.web.config.WebContext; @@ -91,6 +92,9 @@ this.callerPage = callerPage; final CallerPage currentPage = new CallerPage(this); + Utilisateur utilisateur = getSession().getUtilisateur(); + boolean updateOrDelete = documentService.updateOrdeleteDocumentEnabled(document, utilisateur); + // Initialisation du modèle documentModel = new Model<Document>(document); @@ -134,6 +138,7 @@ !fromEditEntity)); } }; + updateLink.setVisibilityAllowed(updateOrDelete); formView.add(updateLink); // Action : suppression @@ -158,6 +163,7 @@ }); deleteButton.add(new JSConfirmationBehavior(getStringModel("Confirm"))); deleteButton.setDefaultFormProcessing(false); + deleteButton.setVisibilityAllowed(updateOrDelete); formView.add(deleteButton); // Action : retour