I. Introduction▲
Parmi les fonctionnalités offertes par les formulaires InfoPath, la gestion des rôles utilisateurs est l'une de mes préférées. Elle nous permet d'implémenter un système de contrôle d'accès sans avoir recours au code, ce qui peut se traduire par exemple par le fait de basculer de vue ou de masquer des champs particuliers selon le grade de l'utilisateur connecté.
Malheureusement, cette fonctionnalité n'est pas supportée par InfoPath Form Services. Ce qui aurait pu être un très gros avantage pour SharePoint, néanmoins il existe des combines pour émuler une gestion des rôles utilisateur, nous allons exposer dans ce tutoriel deux méthodes différentes.
II. Prérequis▲
Pour comprendre au mieux ce qui va suivre vous devrez avoir des connaissances de base sur SharePoint et InfoPath Form Services, sinon il serait nécessaire de commencer par ces tutoriels :
Installation et création de votre première application web de Benjamin Roux
MOSS 2007, Présentation de Forms Services de Stephane Eyskens
Vous devrez disposer de Microsoft Office SharePoint Server 2007 (MOSS 2007) avec Form Services et d'Infopath 2007 pour la conception de votre formulaire.
III. Mise en œuvre▲
Au préalable, créez un formulaire InfoPath simple compatible Form Services. Nous avons pris pour ce tutoriel l'exemple, une demande de congés avec une section visible uniquement pour l'administrateur.
Pour la mise en œuvre, nous avons besoin d'un stock pour la définition des rôles utilisateur. Pour ce fait nous avons deux options, l'utilisation d'une liste SharePoint ou d'un fichier XML embarqué comme fichier ressource.
Dans ce tutoriel, nous allons étaler les deux méthodes dont le principe de fonctionnement est quasi identique.
III-A. Utilisation d'une liste SharePoint▲
III-A-1. Création de la liste SharePoint▲
Dans votre solution SharePoint, créez une nouvelle liste personnalisée que nous allons nommer Rôles utilisateurs.
Dans notre liste, nous aurons besoin que de deux colonnes, une pour les rôles et l'autre pour les noms d'utilisateurs. Renommez la colonne Titre créé par défaut en Roles et ajouter une nouvelle de type texte nommée utilisateurs.
III-A-2. Paramétrage du formulaire▲
Dans notre formulaire nous aurons besoin d'ajouter deux champs cachés et nommés NomUtilisateur et RoleUtilisateur qui vont contenir les informations d'identification (le rôle est le nom d'utilisateur). Pour plus de clarté, nous allons mettre ces deux champs dans un groupe nommé Auth.
Dans le menu Outils | Connexions de données, ajoutez une nouvelle connexion de type réception des données liée à notre liste et nommée recRoles. Sélectionnez les deux colonnes Roles et utilisateur.
III-A-3. Récupération du nom d'utilisateur▲
Il nous faudra maintenant initialiser le champ NomUtilisateur avec le nom de l'utilisateur courant et récupérer son rôle depuis notre liste SharePoint Roles Utilisateurs. Pour procéder, nous allons définir quelques règles à l'ouverture du formulaire.
Dans InfoPath allez dans le menu Outils | Options de formulaire, dans la catégorie Ouvrir et enregistrer cliqué sur le bouton règles puis sur Ajouter.
Nous allons créer nouvelle règle nommée Rec nom d'utilisateur avec une seule action, qui va initialiser la valeur de notre champ NomUtilisateur. Pour ce faire, nous allons utiliser la fonction nomUtilisateur() qui va récupérer le nom de l'utilisateur qui est connecté.
Pour la sélection du champ et de la fonction nomUtilisateur() vous devez impérativement utiliser les fenêtres de sélections prévues à cet effet, car, avec une saisie manuelle, la fonction sera considérée en tant que texte.
Votre règle devrait ressembler à ceci.
III-A-4. Récupération du rôle d'utilisateur▲
Nous allons créer une deuxième règle nommée Init role utilisateur qui va initialiser la valeur de notre champ RoleUtilsateur à rien (à vide), procédez de la même manière comme nous l'avons fait avec la première règle. Nous avons ajouté cette règle par précaution, cars si l'un des utilisateurs ne fait plus partie de votre liste, celui-ci pourra toujours accéder à votre formulaire avec son ancien rôle.
Votre deuxième règle devrait ressembler à ceci.
Nous allons créer à présent notre troisième règle nommée Rec rôle utilisateur, avec une seule action qui définir la valeur du champ roleUtilisateur avec le rôle correspondant à l'utilisateur en cours.
Après avoir sélectionné la connexion recRoles et le champ Roles, définissez un filtre sur le champ utilisateur quand il est égal au champ roleUtilisateur de notre formulaire.
L'action devra ressembler à ceci.
III-A-5. Mise en forme conditionnelle▲
À présent, tout ce dont nous avons besoin est notre disposition pour définir la mise en forme conditionnelle de la section réservée à l'administrateur.
Pour y parvenir, sélectionnez la section contenant les boutons Accepter et Rejeter, affichez le menu contextuel y afférent et cliquez sur le menu Mise en forme conditionnelle.
Dans la fenêtre Mise en forme conditionnelle cliquez sur ajoutez et définissez la condition Masquer ce contrôle lorsque le champ roleUtilisateur est différent "Administrateur".
Fermez toutes les fenêtres, publiez et testez votre formulaire.
III-B. Uilisation d'un fichier XML embarqué▲
Dans cette partie du tutoriel, nous allons passer en revue uniquement les particularités de cette seconde méthode.
III-B-1. Élaboration du fichier XML▲
Comme nous l'avons dit plus haut dans cette méthode nous allons utiliser un fichier XML pour stocker la définition des rôles. Pour notre besoin la structure du fichier XML devrait ressembler à ceci.
<?xml version="1.0" encoding="utf-8"?>
<roles>
<role>
<nom>
Administrateur</nom>
<utilisateurs>
<username>
aityahiaidir</username>
</utilisateurs>
</role>
<role>
<nom>
Utilisateur</nom>
<utilisateurs>
<username>
vous</username>
<username>
sandrine</username>
</utilisateurs>
</role>
</roles>
Enregistrez votre fichier XML sous le nom de Roles.xml et ajoutez-le comme fichier ressource à votre formulaire. Vous pouvez accéder à fenêtre d'ajout de ressources à l'aide du menu Outils | Fichiers de ressources.
III-B-2. Paramétrage du formulaire▲
Définissez les champs NomUtilisateur et RoleUtilisateur comme nous l'avons fait pour la première méthode.
Ajoutez une nouvelle connexion de type réception de données, mais cette fois-ci sélectionnez document XML comme source.
Sélectionnez le fichier ressource Role.xls, nommez votre connexion recRoles comme pour la précédente méthode et laissez tous les autres paramètres de l'assistant tels que définis par défaut.
III-B-3. Récupération du nom d'utilisateur.▲
Procédez de la même manière telle que nous l'avons fait dans la première méthode.
III-B-4. Récupération du rôle d'utilisateur▲
Créez la seconde règle Init role utilisateur exactement comme dans la première méthode.
Nous allons créer la troisième règle nommée Rec rôle utilisateur comme pour la première méthode à quelques différences près au niveau du choix des champs.
Définissez un filtre sur le champ username quand il est égal au champ roleUtilisateur de notre formulaire.
III-B-5. Mise en forme conditionnelle▲
Procédez de la même manière telle que nous l'avons fait dans la première méthode.
IV. Conclusion▲
Voilà, c'est fini pour ce tutoriel, nous avons exposé un simple exemple, mais il vous est possible de faire beaucoup de choses quand vous avez le rôle de l'utilisateur qui s'est connecté comme lui interdire l'édition sur certains champs ou complètement basculer de vue, etc.
Ça sera à vous de choisir la méthode que vous voulez adopter, personnellement je vous recommande la première méthode (utilisation d'une liste SharePoint) car il vous sera aisé d'administrer les rôles de vos utilisateurs via votre liste.
L'inconvénient majeur de cette méthode est qu'elle ne peut pas corréler avec les groupes et utilisateurs de l'annuaire d'Active Directory, comme c'est le cas avec InfoPath, il est donc préférable de restreindre son utilisation aux petits groupes avec peu de mouvements.
V. Remerciements▲
je tiens à remercier dourouc05 pour sa minussieuse relecture.