Bonjour,
Je dois créer un ensemble de rapports consultables de manière hiérarchique dans le Birt Viewer.
L'aspect hiérarchique se base sur la présence d'icônes associées à un lien hypertexte menant vers le rapport suivant.
Ces rapports ne doivent être consultables que pour des utilisateurs possédant le profil idoine.
Pour cela, j'ai mis en place dans le web.xml du Birt Viewer les éléments nécessaires à une gestion de profils.
Du côté de mes rapports, j'ai codé dans le script "initialize" du rapport de plus haut niveau de ma hiérarchie le code suivant :
et sur chacun de mes boutons, amenant vers un rapport "protégé", j'ai codé le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 function checkAccessRights(userProfile) { importPackage(Packages.javax.servlet.http); importPackage(Packages.java.security); importPackage(Packages.java.lang); servletRequest = reportContext.getHttpServletRequest(); var userPrincipal = servletRequest.getUserPrincipal(); if (servletRequest.isUserInRole(userProfile) == false) { return "'http://localhost:8080/birt/frameset?__report=Indicateurs/Indicateurs generaux/erreur.rptdesign'" } else { return null; } } reportContext.setPersistentGlobalVariable("checkAccessRights", checkAccessRights);
Le principe est donc le suivant : lorsque un utilisateur clique sur un bouton, son rôle, tel que défini dans le serveur tomcat, est vérifié et si le rôle est non conforme au rôle requis, alors c'est un rapport d'erreur qui est affiché.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Définition du profil nécessaire à la consultation de ce rapport var profile = "BIRT_ADMIN"; var url = checkAccessRights(profile); if (url != null) { this.getAction().URI = url; }
Cela marche bien, mais mon problème est le suivant :
Si au lieu de suivre la navigation dans les rapports un utilisateur tape directement l'url d'un rapport dans la barre d'adresse du navigateur, alors il accède au rapport sans problème.
Alors, il faudrait mettre en place sur le script "initialize" de l'un quelconque des sous-rapports un mécanisme du genre :
Si l'utilisateur n'a pas les droits requis, alors on lance le rapport d'erreur et la tâche en cours se saborde.
Je n'ai pas trouvé de moyen pour stopper un rapport dans son script "initialize", et pour la "redirection" vers le rapport d'erreur, j'ai essayé les choses suivantes :
mais cela ne marche pas ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 importPackage(Packages.java.lang); System.out.println("In Initialize ..."); importPackage(Packages.org.eclipse.birt.report.engine.api); var erreur = reportContext.getReportRunnable().getReportEngine().openReportDesign("erreur.rptdesign"); var task = reportContext.getReportRunnable().getReportEngine().createRunAndRenderTask(erreur); var render = new HTMLRenderOption() render.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML); task.renderOption = render; task.run();
Quelqu'un aurait il déjà mis en oeuvre ce genre de manip, ou aurait une idée ou un avis ?
Partager