Validate if a user has a role by role name
1 min read
Charles Llamas
This post is only available in English.
The below functions help you to validate if the current user logged in Dynamics has a role by role name:
function currentUserHasRole(roleName){ var hasRole = false; var userRolesKey = "userRoles_" + Xrm.Utility.getGlobalContext().userSettings.userId; //validate if role names are already in cache var userRoles = JSON.parse(sessionStorage.getItem(userRolesKey)); if (typeof (userRoles) === "undefined" || userRoles === null) userRoles = retrieveUserRoles(); userRoles.forEach(function(name) { if (name.toLowerCase() == roleName.toLowerCase()) hasRole = true; }); return hasRole; }; function retrieveUserRoles(){ var userSettings = Xrm.Utility.getGlobalContext().userSettings; var userRolesKey = "userRoles_" + userSettings.userId; var userRoles = []; var securityRoles = userSettings.securityRoles; for (var i = 0; i < securityRoles.length; i++) { var role = retrieveRecordSync( "roles", securityRoles[i], "name"); if(role) userRoles[i] = role.name; } //store the role names in cache sessionStorage.setItem(userRolesKey, JSON.stringify(userRoles)); return userRoles; }; function retrieveRecordSync(entityName,id,attributes) { try { var envUrl = Xrm.Utility.getGlobalContext().getClientUrl(); var _version = "v9.1"; var selectString = "?$select=" + attributes; var req = new XMLHttpRequest(); req.open("GET", encodeURI(envUrl+"/api/data/" + _version + "/" + entityName + "(" + id + ")" + selectString) , false); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); var response = null; req.onreadystatechange = function () { if (req.readyState === 4) { req.onreadystatechange = null; if (req.status === 200) response = JSON.parse(req.responseText); else console.log(this); } }; req.send(); return response; } catch (e) { console.log(e.message); } };
Example of implementation:
currentUserHasRole('system administrator');
The function returns true if the current user has a role named 'system administrator'.