Wednesday, December 21, 2011

checking a specific role by role name in MS CRM 2011


As in my Previous Post i have mentioned how to get the role GUIDs for the current user.
Here we can check if a specific role name belongs to the current user, cuz the role GUIDs may differ from system to system.
I found this on net, but there is a minor change.

var sameRole = UserHasRole("System Administrator");

the below function will fetch the role GUID and it will chk , if its present in the Xrm.Page.context.getUserRoles() , list of GUIDs for roles.



function UserHasRole(roleName)
{
    var serverUrl = Xrm.Page.context.getServerUrl();
    var oDataEndpointUrl = serverUrl + "/XRMServices/2011/OrganizationData.svc/";
    oDataEndpointUrl += "RoleSet?$top=1&$filter=Name eq '" + roleName + "'";
    var service = GetRequestObject();
    if (service != null)
    {
        service.open("GET", oDataEndpointUrl, false);
        service.setRequestHeader("X-Requested-Width", "XMLHttpRequest");
        service.setRequestHeader("Accept", "application/json, text/javascript, */*");
        service.send(null);
        var requestResults = eval('(' + service.responseText + ')').d;
        if (requestResults != null && requestResults.results.length == 1)
        {
            var role = requestResults.results[0];
            var id = role.RoleId;
            var currentUserRoles = Xrm.Page.context.getUserRoles();
            for (var i = 0; i < currentUserRoles.length; i++)
            {
                var userRole = currentUserRoles[i];
                if (GuidsAreEqual(userRole, id))
                {
                    return true;
                }
            }
        }
    }
    return false;
}

//this will create the XMLHttpRequest object
function GetRequestObject()
{
    if (window.XMLHttpRequest)
    {
        return new window.XMLHttpRequest;
    }
    else
    {
        try
        {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch (ex)
        {
            return null;
        }
    }
}

//just to compare the two GUIDs
function GuidsAreEqual(guid1, guid2)
{
    var isEqual = false;
    if (guid1 == null || guid2 == null)
    {
        isEqual = false;
    }
    else
    {
        isEqual = guid1.replace(/[{}]/g, "").toLowerCase() == guid2.replace(/[{}]/g, "").toLowerCase();
    }
    return isEqual;
}

thanks,

yes.sudhanshu

No comments:

Post a Comment