SharePoint 2013 RESTful API : users and groups

Salut à tous ! Je suis si chaud que je vais écrire mon article entier en anglais ! Whaouuu :p toujours pas impressionné ? Je vais aussi l’écrire en français (Ça ne devrait pas être difficile, comme c’est ma langue natale) ! Allez, trêve de futilités, attelons nous au sujet.

Article in english

Récemment j’ai joué un peu avec l’API SharePoint 2013, et en particulier avec les méthodes concernant les groupes et les utilisateurs. Je devais récupérer l’utilisateur actuellement connecté dans SP, et vérifier si il appartenait à un groupe SP (pour être précis, le groupe Administrateur de SharePoint). Tout d’abord, j’ai essayé d’utiliser l’approche classique, et d’utiliser le CSOM, déclarant le ClientContext(), puis le Web() et enfin le Site() … mais dans mon cas, je voulait utiliser une requête asynchrone, j’ai donc regardé du côté de l’API SP 2013 avec l’utilisation de la méthode Ajax pour l’appeler.

Pour pouvoir utiliser mes exemples, n’oubliez pas de référencer jQuery à votre page, ainsi que SP.UserGroup.js.

$.getScript("/_layouts/15/SP.UserProfiles.js");
SP.SOD.executeOrDelayUntilScriptLoaded(functionToCall, 'SP.UserProfiles.js');

En faisant cela, vous allez charger SP.UserProfiles.js grâce à jQuery. Puis, vous allez spécifier que « functionToCall » va être exécutée seulement après que le script ai été chargé. Si vous ne désirez pas faire cela, il est possible que le script n’ai pas fini d’être chargé quand le fonction va se lancer, car $.getScript est asynchrone. Vous pouvez aussi utiliser la méthode ci-dessous :

_spBodyOnLoadFunctionNames.push("functionToCall");

Cela va ajouter l’exécution de votre fonction dans la pile d’exécution des fonctions du chargement du body de votre site SharePoint.

Voici les exemples de codes que j’ai effectué :

Récupérer l’utilisateur actuellement connecté

$.ajax({
        url : _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + _spPageContextInfo.userId + ")",
        contentType : "application/json;odata=verbose",
        headers : { "accept" : "application/json;odata=verbose" },
        success : userFound,
        error : userNotFound
    });
    function userFound(data, request){
        loginName = data.d.Title;
        console.log("Welcome ",loginName);
    }
    function userNotFound(error) {
        console.log(error.textStatus);
    }

Vérifier si l’utilisateur appartient à un certain groupe

function checkAdminRights() {
        var groupId = 7;  // admin group
	var userId = _spPageContextInfo.userId;  // get current user ID
	var requestHeaders = { "accept" : "application/json; odata=verbose" };
	
	$.ajax({
		url : _spPageContextInfo.webAbsoluteUrl + "/_api/web/sitegroups(" + groupId + ")/users/getbyid(" + userId + ")",
		contentType : "application/json;odata=verbose",
		headers : requestHeaders,
		success : userAdmin,
		error : userNotAdmin
	});
	function userAdmin(data, request) {
		var groupName = data.d.LoginName;
	}
	function userNotAdmin(error) {
		console.log("user not admin");
		$("ul.ms-core-listMenu-root li.static").each(function() {
			console.log("Found !");
			// if we find the word Administration in the menu title, we hide it. Hack to find what we want, in spite of the unamed (no id, no particular class) left menu nodes.
			if($(this).find("span.menu-item-text").text().indexOf("Administration") >= 0) {	
				$(this).hide();
			} 
		});
	}
}

Bien sûr,  je n’avais pas besoin du premier exemple de code, vu que le second correspond à ce que je veux faire. Mais j’ai préféré marquer les étapes auxquelles j’ai procédé afin de garder une trace de la logique et des différents morceaux de code. Si vous avez besoin de creuse plus en profondeur le sujet, ou de manipuler d’autres types d’objet, voici un schéma de l’architecture récupérer sur le site MSDN. Il montre les chemins à requêter pour faire ce que vous voulez (Personnellement, j’ai fait fonctionner mon code après avoir consulté ce schéma, il est plutôt auto-explicite) :

SP2013_REST_service_users_groups

Pages: 1 2

Laisser un commentaire