Pages

Tuesday 28 January 2014

Enable/Disable a Ribbon button based on a Security Role



The Below snippet code is used for Enabling/Disabling the Ribbon button Based on security Role. In my Scenario, if a user has "System Administrator" type of Security-Role then a button is Enabled.



Save the below code in a webresource.
-------------------->>
function UserHasRole(Nameofrole) {

    var serverUrl = Xrm.Page.context.getServerUrl();
    var oDataEndpointUrl = serverUrl + "/XRMServices/2011/OrganizationData.svc/";
    oDataEndpointUrl += "RoleSet?$top=1&$filter=Name eq '" + Nameofrole + "'";
    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;
}

function GetRequestObject() {
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    }
    else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch (ex) {
            return null;
        }
    }
}
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;
}

function callMain() {

    if (UserHasRole("System Administrator")) {                 //passing the security role to another function
        return true;
    }
    else {
        return false;
    }

}


Now Open the Visual Ribbon Editor and select the button which can be on HomePage/Sub-Grid/Form.
In Enable Rules click on "New" to add a rule for the display of a button. In New select "Custom Rule" and add the JScript webresource URL and mention the function name.
The Below Screen shot shows it.


In the above snippet "callMain" is a name of main function.

No comments:

Post a Comment