Sunday 3 June 2012

'Access denied' While Accessing CRM Current User Role

I faced some problem while accessing the CRM Current user role with the below code snippet. Then i did some research and found the solution for the same.

 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.length == 1) {
                    var role = requestResults[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;
        }


When the user tries to execute the code, he/she will get 'Access denied' Error in CRM page.

Solution :

To resolve this error, we need to replace the 'var serverUrl = Xrm.Page.context.getServerUrl();' code with the 'var serverUrl = "/" + Xrm.Page.context.getOrgUniqueName();'.

Happy Tracing......

No comments:

Post a Comment